2011-04-04 5 views
0

J'utilise d'abord le code EF 4, et j'ai beaucoup de temps ici. Je continue à obtenir l'erreur:Entity Framework 4.1 - Index de clés étrangères?

{"Introducing FOREIGN KEY constraint 'SalesRepresentative_SalesOrders' on table 'SalesOrders' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint. See previous errors."}

Consultez le code suivant. Si je commente les champs d'ID de clé étrangère, il génère son propre et cela fonctionne, mais si je ne le fais pas, j'obtiens l'erreur.

Public Class SalesOrder 
     Inherits EntityBase(Of SalesOrder) 

#Region "Members/Properties" 

     Public Property ID As Integer 
     'Public Property CustomerID As Integer 
     'Public Property CustomerLocationID As Integer 
     'Public Property SalesRepresentativeID As Integer 
     'Public Property SalesOrderStatusID As Integer 

     Public Overridable Property Customer As Customer 
     Public Overridable Property CustomerLocation As CustomerLocation 
     Public Overridable Property Items As ICollection(Of SalesOrderItem) 
     Public Overridable Property Status As SalesOrderStatus 
     Public Overridable Property SalesRepresentative As SalesRepresentative 

#End Region 

    End Class 

Public Class SalesRepresentative 
     Inherits EntityBase(Of SalesRepresentative) 

#Region "Members/Properties" 

     Public Property ID As Integer 

     Public Property FirstName As String 
     Public Property LastName As String 

     Public Overridable Property Customers As ICollection(Of Customer) 
     Public Overridable Property SalesOrders As ICollection(Of SalesOrder) 

#End Region 

    End Class 

Je me demande donc quelques petites choses:

Dois-je créer la clé étrangère propriété et la propriété de navigation ? Est-ce que je viens de créer la propriété navigation sur l'objet enfant ? Est-ce que je crée simplement la propriété de navigation sur l'objet parent ?

Vous avez des idées? Merci!!

+0

Je préfère les "indices" ... mais c'est juste moi. :) – xanadont

Répondre

1

Vous ne devez pas créer de propriété de navigation des deux côtés, mais vous devez créer at least on one side pour que la relation soit créée dans la base de données.

De même, vous n'avez pas besoin d'utiliser la propriété pour la clé étrangère. Cette propriété diffère entre independent and foreign key association. Dites simplement que l'utilisation de la propriété de clé étrangère est contraire à l'idée d'ORM, mais cela rend la vie avec EF beaucoup plus facile.

La partie avec commentaire FK est intéressante. Pouvez-vous valider dans la base de données que les relations sont créées et comment sont-elles configurées (suppressions en cascade)?

+0

J'ai trouvé que si je ne définis pas le FK, l'EF le crée dans la base de données, mais il est nullable. Donc, ça craint un peu !! Donc, je pense que pour obtenir exactement ce que vous voulez, vous devez définir la clé et la propriété nav de l'extrémité enfant de la relation, puis la propriété nav de l'objet parent. Au moins la propriété nav sur le parent et le FK sur l'enfant? – Sam

+0

Oui, il crée la relation quand je commente les propriétés, mais les FK sont nullables. – Sam

+0

Vous n'avez pas besoin de nav. propriétés des deux côtés. Dans la cartographie fluide, vous pouvez utiliser '.HasOptional' ou' .HasRequired' pour définir si le nav. La propriété du côté FK est nullable ou non. –

Questions connexes