Le nom de la propriété dans un type doit être unique
Je suis en utilisant Entity Framework 5 et j'ai les entités suivantes:
public class User {
public Int32 Id { get; set; }
public String Username { get; set; }
public virtual ICollection<CLaim> CLaims { get; set; }
}
public class Claim {
public Int32 Id { get; set; }
public String Type { get; set; }
public String Value { get; set; }
public virtual User User { get; set; }
}
Quelques notes à propos de ces entités:
- Dans l'entité Utilisateur, l'Id est le PK;
- Dans la Revendication de l'entité de l'Id est un FK et est égale à l'Utilisateur.Id;
- Dans la Revendication de l'entité de la PK est composé de (Id, Type, Valeur)
J'ai donc l'instruction SQL suivante pour ces entités:
create table dbo.Users
(
Id int identity not null
constraint PK_Users_Id primary key clustered (Id),
Username nvarchar (120) not null
constraint UQ_Users_Username unique (Username)
);
create table dbo.Claims
(
Id int not null,
[Type] nvarchar (200) not null,
Value nvarchar (200) not null,
constraint PK_Claims_Id_Type_Value primary key (Id, [Type], Value),
);
alter table dbo.Claims
add constraint FK_CLaims_Id foreign key (Id)
references dbo.Users(Id) on delete cascade on update cascade;
Enfin, la configuration de ces entités sont les suivantes:
internal class UserConfiguration : EntityTypeConfiguration<User> {
internal UserConfiguration() : base() {
ToTable("Users");
HasKey(x => x.Id);
Property(x => x.Id).IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(x => x.Username).IsRequired().HasMaxLength(120);
}
}
internal class ClaimConfiguration : EntityTypeConfiguration<Claim> {
internal ClaimMapper() : base() {
ToTable("Claims");
HasKey(x => new { x.Id, x.Type, x.Value });
Property(x => x.Id).IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Property(x => x.Type).IsRequired().HasMaxLength(200);
Property(x => x.Value).IsRequired().HasMaxLength(200);
HasRequired<User>(x => x.User).WithMany(y => y.Claims).Map(z => { z.MapKey("Id"); });
}
}
LE PROBLÈME:
Lorsque j'essaie de créer un utilisateur je reçois l'erreur suivante:
Chaque nom de propriété dans un type doit être unique. Nom de la propriété " Id " est déjà définie.
Personne ne sait ce que je fais de mal?
source d'informationauteur Miguel Moura | 2013-07-14
Vous devez vous connecter pour publier un commentaire.
MapKey
n'est utilisée que si votre colonne de la clé étrangère n'est pas exposé comme une propriété dans votre modèle. Mais dans votre cas, c'est - propriétéClaim.Id
. Dans ce cas, vous devez utiliserHasForeignKey
au lieu deMapKey
:En plus de Slauma la réponse de
HasForeignKey
n'est pas disponible pour 1:1, si vous avez encore besoin d'elle, vous pouvez tout simplement utiliserWithMany
sans paramètres