2009-10-28 3 views
3

Je fais une petite application Silverlight qui permettra aux utilisateurs de créer des commandes. J'ai créé Linq 2 SQL dbml et y ai déplacé mes tables de base de données, "Orders" et "OrderLines", il y a une association entre elles. Order.ID ~ OrderLine.OrderID, alors j'ai créé DomainService pour mes tables, où j'ai activé l'accès client, il a généré pour moi les méthodes, Insert, Update, Delete, Get, pour Orders et OrderLines, maintenant je crée New Order à partir de ma demande silverlight, le usercontrol ressemble à ceci:Linq 2 SQL, insérer des objets avec des objets enfants associés Liste dans la base de données, 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}); 
    } 
} 

et service domaine Méthode:

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

j'ai mis ici point de rupture, et le fil vient ici, et tout dones ok. mais après cela dans la base de données aucun ordre et aucune ligne de commande n'existent. et la sortie écrit: "Une exception de première instance de type" System.Data.SqlClient.SqlException "s'est produite dans System.Data.Linq.dll"

que puis-je faire? aidez s'il vous plaît, et merci.

Répondre

2

Créez-vous des lignes de commande à partir de zéro? Si c'est le cas, vous devez vous assurer que s'ils sont nouveaux, vous appelez Context.OrderLines.InsertOnSubmit (orderLine) pour chaque OrderLine que vous ajoutez, ou vous obtiendrez des problèmes comme celui-ci. Aussi, vous devez fournir tous les détails d'exception ici ...

+0

oui je crée à partir de zéro, mais j'ai pensé que les lignes de commande seront ajoutées dans la base de données avec la commande. cela signifie que je dois ajouter des lignes de commande manuellement, séparées de la commande? –

+0

Oui. La raison en est que linq 2 SQL ne sait pas si votre relation est associative ou un type de relation parent-enfant, donc cela vous rend explicite. Cela m'a aussi jeté quand je débutais avec le cadre. Ça a un sens de penser à ça ... –

Questions connexes