1

我重新实现了会员提供者并希望保留原始数据库方案。我有 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 并且我希望它也是 Membership 表的 PK。

我可以保证 UserProfile.UserId 是数据库生成的身份并且永远不会重复。我尝试了以下代码,但在创建迁移过程中失败并出现错误:

类型中的每个属性名称都必须是唯一的。已定义属性名称“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    !!!!

如果我删除任何用感叹号标记的行,迁移创建得很好,但列名错误。

4

1 回答 1

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();如果您想在用户上删除 Membership 导航属性。

于 2013-04-01T22:31:56.930 回答