4.1 EF - Modèle de Relations
Je suis en train de créer rapidement un ASP.NET MVC 3 application à l'aide de la version RC de EF 4.1. J'ai deux modèles:
public class Race
{
public int RaceId { get; set; }
public string RaceName { get; set; }
public string RaceDescription { get; set; }
public DateTime? RaceDate { get; set; }
public decimal? Budget { get; set; }
public Guid? UserId { get; set; }
public int? AddressId { get; set; }
public virtual Address Address { get; set; }
}
et
public class Address
{
public int AddressId { get; set; }
public string Street { get; set; }
public string StreetCont { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
public virtual Race Race { get; set; }
}
J'obtiens l'erreur suivante lorsque vous essayez d'insérer une nouvelle Course:
Impossible de déterminer les principales
d'une association entre les types de
'rcommander.Modèles.Race " et
'rcommander.Modèles.Adresse". L'
principal de cette association doit
être explicitement configuré à l'aide de
la relation API fluent ou de données
les annotations.
Ne faut-il pas reconnaître RaceId que la clé primaire de la Courses de la table et AddressId que la FK à la table des Adresses automatiquement? Ai-je raté quelque chose?
Merci!
Vous devez vous connecter pour publier un commentaire.
Le problème semble être ici que EntityFramework ne pouvez pas reconnaître d'où l'écart de la clé est, comme vous êtes titulaire de la croix de références dans les deux objets. N'étant pas sûr de ce que vous voulez atteindre, je peux suggérer quelque chose comme ceci:
Sauter référence à la Race dans la seconde entité.
Le problème, ici, est de 1:1 rapport entre l'Adresse et la Course! Vous voulez probablement de la carte 1:N si vous souhaitez modifier l'adresse de:
Si vous souhaitez utiliser 1:1, alors vous ne pouvez pas utiliser AddressId dans la Course, mais AddressId dans l'Adresse de la clé étrangère de la Course en raison d'entity framework peut arriver à 1:1 seulement être "partage" de la clé primaire.
Pour one-to-one relation, vous devez ajouter "[obligatoire]" attribut dans la deuxième classe. Voir ci-dessous:
Il y a un bon poste: les Associations en EF Premier Code CTP5: Partie 2 – Partagé Clé Primaire Associations
http://weblogs.asp.net/manavi/archive/2010/12/19/entity-association-mapping-with-code-first-one-to-one-shared-primary-key-associations.aspx
Il reconnaît Id comme clé primaire par la convention. Donc, ce que vous devez faire:
La
[Key]
attribut indique qu'il devrait être le PrimaryKeySi vous ne voulez pas cela, vous avez besoin de renommer vos clés principales simplement
public int Id {get; set; }
Je pense qu'il serait résolu comme ça... je suppose qu'une adresse n'est pas requis pour être associé à une race, mais une course doit toujours être associé à une adresse.
J'ai eu le même problème avec les Patients et les Incidents, et je l'ai résolu avec InverseProperty qui est en fait la même chose avec de clé étrangère, mais dans l'autre sens