12
votes

EF4.1 Code Premier type complexe en tant que clé primaire

J'essaie actuellement de mettre en œuvre les référentiels pour mes objets de domaine avec la RC d'entité Framework 4.1 et sa première approche de code. Maintenant, j'ai une entité de domaine "Voyage" qui a un identifiant unique encapsulé dans le type "Voyagenumber" xxx

maintenant, je reçois une exception lorsque je le fais dans la configuration de mon dBContext: xxx

La propriété 'Voyagenumber' ne peut pas être utilisé comme une propriété clé sur l'entité 'Domain.model.voyages.voyage' parce que Le type de propriété n'est pas une clé valide taper. Seuls les types scalaires, la chaîne et Les octets [] sont des types de clés pris en charge.

Et aussi lorsque j'essaie ceci: xxx

L'expression de propriétés 'k => k.voyagenumber.id 'n'est pas valide. Les expression devrait représenter un Propriété: C #: 'T => T.MYPROPERTY'

Dois-je vraiment détruire mon Voyagenumber et le remplacer par un type primitif?


3 commentaires

Quel est le message d'exception lorsque vous utilisez ceci: ModelBuilder.entity (). HASKEY (k => k.voyagenumber);


Mise à jour de la question avec les messages d'exception.


toujours le cas dans EF 6.1.3


3 Réponses :


14
votes

C'est la limitation. Les membres clés ne peuvent être que des propriétés scalaires directement dans l'entité. Le type complexe est représenté comme une propriété complexe qui n'est pas prise en charge.


3 commentaires

Quelle honte, alors je suppose que je vais d'abord abandonner le code, car je ne suis pas disposé à abandonner l'encapsulation de la clé primaire.


Je n'étais pas clair. C'est la limitation du cadre d'entité. Non seulement la limitation du code en premier.


Est-ce toujours vrai dans EF6? Je reçois la même erreur documentée dans les questions originales afin que je suppose que rien n'a changé mais en espérant qu'une option de configuration a été ajoutée que je manque.



0
votes

Pour une classe isolée, vous pouvez faire une solution de contournement en lecture seule en ajoutant une méthode "Obtenir" à votre dBContext qui fait un SQLQUERY <> et mappe la table à la classe en interne (l'ancien Fashioned Way).

J'ai travaillé ici un cas de test minimal ici: https: // github.com/timabell/ef-complex-pk

par exemple xxx


0 commentaires

0
votes

Nous pouvons le résoudre avec ci-dessous. J'espère que c'est utile. xxx

dans dbcontext: xxx

dans le référentiel: xxx


0 commentaires