Linq 2 SQL, вставка объектов со списком связанных дочерних объектов в базу данных, Silverlight RIA

Я делаю небольшое приложение Silverlight, которое позволит пользователям создавать заказы. Я создал Linq 2 SQL dbml и перетащил туда свои таблицы базы данных «Заказы» и «Строки заказов», между ними существует связь. Order.ID ~ OrderLine.OrderID, поэтому я создал DomainService для своих таблиц, где я включил клиентский доступ, он сгенерировал для меня методы Insert, Update, Delete, Get для заказов и OrderLines, теперь я создаю новый заказ из в моем приложении silverlight пользовательский элемент управления выглядит так:

 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.SqlClient.SqlException' произошло в System.Data.Linq.dll"

что я могу сделать? пожалуйста, помогите и спасибо.


person Va.    schedule 28.10.2009    source источник


Ответы (1)


Вы создаете OrderLines с нуля? Если это так, вам необходимо убедиться, что если они новые, вы вызываете Context.OrderLines.InsertOnSubmit (orderLine) для каждой добавляемой строки OrderLine, иначе вы столкнетесь с подобными проблемами. Кроме того, вы должны предоставить здесь всю информацию об исключениях ...

person Dave Markle    schedule 28.10.2009
comment
да, я создаю с нуля, но я думал, что строки заказа будут добавлены в базу данных вместе с заказом. Значит, мне нужно добавлять строки заказа вручную, отдельно от заказа? - person Va.; 28.10.2009
comment
да. Причина в том, что linq 2 SQL не знает, являются ли ваши отношения ассоциативными или отношениями родительско-дочернего типа, поэтому он делает вас явным. Это тоже потрясло меня, когда я только начинал работать с фреймворком. Это как бы имеет смысл думать об этом ... - person Dave Markle; 28.10.2009