我重新实现会员资格,并希望保留原始数据库方案。我有2个班级:
class UserProfile
{
public int UserId {get;set} //PK
......
}
class Membership
{
public int UserId {get;set;} //FK to UserProfile.UserId
.........
}
现在我使用FluentAPI将Membership.UserId作为FK附加到UserProfile.UserId,我希望它也是成员资格表的PK。
我可以保证UserProfile.UserId是DB生成的身份,永远不会重复。 我尝试了以下代码,但在创建迁移期间出现错误:
类型中的每个属性名称都必须是唯一的。已定义属性名称“UserId”。
HasKey(k => k.UserId); //Declare it as PK !!!!
Map(m => m.ToTable("webpages_membership")); //Setup table name
HasRequired(t => t.User) //Nav.property to the UserProfile
.WithRequiredDependent(t1 => t1.Membership) //Rev.nav.property from the UserProfile
.Map(m => m.MapKey("UserId")); //FK to the UserProfile !!!!
如果删除任何标记为感叹号的行,则迁移创建正常,但列名称错误。
答案 0 :(得分:0)
我认为这就是你所追求的......
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
...
modelBuilder.Entity<Membership>()
.HasKey(x => new { x.UserId });
modelBuilder.Entity<Membership>()
.HasRequired(x => x.User)
.WithOptional(x => x.Membership);
与实体......
public class UserProfile
{
[Key] public int UserId { get; set; }
public Membership Membership { get; set; }
}
public class Membership
{
public int UserId { get; set; }
public UserProfile User { get; set; }
}
...或者只是.WithOptional();
,如果你想删除用户的会员导航属性。