J'ai deux classes d'un utilisateur et une table d'image:EF Code d'abord, comment pouvez-vous mapper une relation bidirectionnelle un à un ou zéro dans EF?
public class User
{
public Guid? ImageId {get; set;}
public Image Image {get; set;}
}
public class Image
{
public Guid? UserId {get; set;}
public User User {get; set;}
}
L'utilisateur et l'image peuvent exister sur leur propre sans l'autre entité, mais s'ils ont une relation, un utilisateur ne peut être associé avec une image, et une image ne peut avoir d'utilisateur que si elles ne sont pas nulles. Comment est-ce que je cartographie ceci? Actuellement, j'ai:
public UserMapping()
{
HasOptional(x => x.ProfileImage).WithOptionalPrincipal(x =>
x.User).Map(x => x.MapKey("UserId"));
}
Et rien sur le ImageMapping depuis d'autres réponses, il a été déclaré ne pas la carte relation deux fois ou il disjoncte. Cependant, le fichier de migration finit par générer une propriété user_id supplémentaire sur la table d'image puis:
CreateTable(
"dbo.Images",
c => new
{
Id = c.Guid(nullable: false),
UserId = c.Guid(),
User_Id = c.Guid(),
})
.PrimaryKey(t => t.Id)
.ForeignKey("dbo.Users", t => t.User_Id)
.Index(t => t.User_Id);
Ce qui est faux. Comment puis-je faire le mappage de manière appropriée?
EDIT: J'ai également trouvé thishttp: //stackoverflow.com/questions/21082085/entity-framework-optional-1-to-1-relation-on-both-ends et essayé ce qui est montré dans l'original question qui prétend travailler, mais il ne crée pas encore User_Id.
Pas une réponse à la mais je crois que si vous le nom user_id lors du mappage de la clé, il va se débarrasser du double. Sauf si vous créez directement UserId dans l'utilisateur, je crois que par défaut User_Id – Ronan
Je le fais comme vu ci-dessus.Et déclarant explicitement cette propriété en tant que clé dans le mappage. – SventoryMang
Dans le code ci-dessus, vous ne créez pas de champ UserId. Lorsque vous l'omettez, l'infrastructure d'entité crée User_Id à la place. Dans la cartographie vous avez alors UserId qui ne correspond pas au nom de l'ef créé celui qui est User_Id – Ronan