Linq 2 SQL, вставка объектов со связанным списком дочерних объектов в базу данных, Silverlight RIA - PullRequest
3 голосов
/ 28 октября 2009

Я делаю небольшое приложение Silverlight, которое позволит пользователям создавать заказы. Я создал Linq 2 SQL dbml и перетащил туда свои таблицы базы данных "Orders" и "OrderLines", между ними есть связь. Order.ID ~ OrderLine.OrderID, поэтому я создал DomainService для своих таблиц, где я включил клиентский доступ, он сгенерировал для меня методы Insert, Update, Delete, Get, для Orders и OrderLines, теперь я создаю New Order из мое приложение 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.SqlClient.SqlException »произошло в System.Data.Linq.dll»

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

1 Ответ

2 голосов
/ 28 октября 2009

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

...