2010-10-20 4 views
0

J'ai deux tables Customer et CustomerConfiguration qui doivent avoir un mappage un-à-un. Ce que j'ai fait a été de faire de customerId la clé primaire (et l'identité) du client, puis de créer un champ customerId dans CustomerConfiguration qui soit unique et mappé à Customer.customerId. Cela semble me donner ce dont j'ai besoin, et EF4 reprend ce problème (en utilisant aussi RIA) en ce sens qu'il voit Customer to CustomerConfiguration comme un mappage 1 - 0..1.Création d'un mappage un-à-un dans Sql Server 2008 et Entity Framework 4

Mais, n'ayant jamais fait cela, est-ce la bonne façon de faire cela? Y a-t-il des pièges que je dois surveiller?

Répondre

1

Ça me semble bien.

La table du client doit contenir le code client PK et d'autres champs.

La table CustomerConfiguration doit contenir CustomerConfigurationID et CustomerID PK/FK. Seul le point que je ferais est de supprimer le FK de l'entité "CustomerConfiguration" (EF le mettra si vous avez dit "Inclure les clés étrangères dans le modèle").

Vous devriez être en mesure d'obtenir le CustomerConfiguration en faisant ceci:

var someCust = ctx.Customers.SingleOrDefault(c => c.Id = 1); // get a cust 
var someCustConfig = ctx.Customers.CustomerConfiguration; 

qui utilisera la « navigation de la propriété ».

Autre point que je déciderais par chargement paresseux.

Par défaut, il s'agit de sur, ce qui signifie que le code ci-dessus provoquera 2 accès à la base de données.

Si vous le mettez hors , et faire ceci:

var someCust = ctx.Customers.Include("CustomerConfiguration").SingleOrDefault(c => c.Id = 1); // get a cust 
var someCustConfig = ctx.Customers.CustomerConfiguration; 

Il se traduira par seulement 1 coup de la base de données, car elle «avide charge la relation via une jointure interne.

Questions connexes