2009-10-28 48 views
3

我在做一个小的Silverlight应用程序,它将允许用户创建订单。我创建了Linq 2 SQL dbml,并在那里拖动了我的数据库表“订单”和“订单行”,它们之间存在关联。 Order.ID〜OrderLine.OrderID,然后我为我的表创建了DomainService,其中我启用了客户端访问,它为我生成了订单和订单行的方法,插入,更新,删除,获取,现在我正在创建新订单我的Silverlight应用程序,用户控件看起来是这样的:Linq 2 SQL,插入具有关联子对象的对象列表到数据库中,Silverlight RIA

public partial class NewOrderView : UserControl 
{ 
    public ObservableCollection<OrderLine> OrderLines { get; set; } 
    public NewOrderView() 
    { 
     InitializeComponent(); 
     OrderLines = new ObservableCollection<OrderLine>(); 
     dataGrid.ItemsSource = OrderLines; 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     var order = new Order(); 
     foreach (var orderLine in OrderLines) 
     { 
      order.OrderLines.Add(orderLine); 
     } 
     order.CompanyId = int.Parse(StaticContainer.CurrentUser.CompanyId.ToString()); 
     order.CreationDate = DateTime.Now; 
     order.Status = "შეკვეთილი"; 
     order.Id = 1; 
     var ctx = new EntreeDomainContext(); 
     ctx.Orders.Add(order); 
     ctx.SubmitChanges(); 
    } 

    private void Button_Click_1(object sender, RoutedEventArgs e) 
    { 
     StaticContainer.Navigation.Back(); 
    } 

    private void Button_Click_2(object sender, RoutedEventArgs e) 
    { 
     StaticContainer.Navigation.LogOut(); 
    } 

    private void AddProduct(object sender, ProductAdditionEventHandlerArgs args) 
    { 
     var result = OrderLines.Where(x => x.Item.itmKEY == args.Product.itmKEY).FirstOrDefault(); 
     if(result==null) 
     OrderLines.Add(new OrderLine(){Item = args.Product}); 
    } 
} 

和域名服务方法:

public void InsertOrder(Order order) 
    { 
     Context.Orders.InsertOnSubmit(order); 
     Context.SubmitChanges(); 
    } 

我已经把这里突破点,而线程来这里,一切都OK多内斯。但之后在数据库中不存在任何订单和订单行。并输出写道:“在System.Data.Linq.dll中发生类型'System.Data.SqlClient.SqlException'的第一次机会异常”

我该怎么办? 请帮忙,谢谢。

回答

2

您是否从头开始创建OrderLines?如果是这样,你需要确保它们是新的,你为每个你添加的OrderLine调用Context.OrderLines.InsertOnSubmit(orderLine),否则你会遇到这样的问题。此外,你应该在这里提供所有的例外细节...

+0

是的,我从头开始创建,但我订购的订单将按顺序添加到数据库中。所以这意味着我必须手动添加命令行,从命令中分离出来? – 2009-10-28 11:37:25

+0

是的。原因是因为linq 2 SQL不知道你的关系是关联关系还是父子关系类型,所以它使你明确。当我刚开始使用框架时,这也让我感到不安。这种想法很有意思... – 2009-10-28 12:36:26