Linq 2 SQL,将具有关联子对象的对象列入数据库Silverlight RIA

时间:2009-10-28 11:14:18

标签: linq-to-sql silverlight-3.0 wcf-ria-services

我正在做一个小型Silverlight应用程序,它将允许用户创建订单。我创建了Linq 2 SQL dbml并在那里拖动了我的数据库表,“Orders”和“OrderLines”,它们之间存在关联。 Order.ID~OrderLine.OrderID,然后我为我的表创建了DomainService,在那里我启用了客户端访问,它为我生成了方法,插入,更新,删除,获取,订单和OrderLines,现在我正在创建新订单我的silverlight应用程序,usercontrol看起来像这样:

 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();
    }

我已经把断点放在这里,线程来到这里,一切都很好。但之后在数据库中没有订单,也没有订单行。和输出写道:“在System.Data.Linq.dll中发生'System.Data.SqlClient.SqlException'类型的第一次机会异常”

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

1 个答案:

答案 0 :(得分:2)

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