我有

public class MyUser : IdentityUser<int,MyLogin,MyUserRole,MyUserClaim>
{
     public virtual MyUserProfile Profile { get; set; }
}

public class MyUserProfile
{
     public int Id { get; set; }
     public string FirstName { get; set; }
     public string LastName { get; set; }
}

我的 IdentityUser 实现具有 INT PK。我想在 MyUser 中有一个导航属性,而在另一侧没有。我更喜欢数据注释。是否可以使用 IdentityUser PK 进行导航? (EF v 6.1.3)

UPD #1。
依赖类型 - MyUserProfile。它不必包含 MyUser 类型的导航属性。

最佳答案

我想提一下与@RudiVisser 关于创建的数据库的答案相比,我的测试略有不同。

public class MyUser
{
    public int Id { get; set; }

    public virtual MyUserProfile Profile { get; set; }
}

public class MyUserProfile
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}


class MyContext : DbContext
{
    public DbSet<MyUser> Users { get; set; }
    public DbSet<MyUserProfile> Profiles { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<MyUser>()
            .HasOptional(x => x.Profile)
            .WithRequired();
    }
}

生成的迁移
public override void Up()
{
    CreateTable(
        "dbo.MyUserProfiles",
        c => new
            {
                Id = c.Int(nullable: false),
                FirstName = c.String(),
                LastName = c.String(),
            })
        .PrimaryKey(t => t.Id)
        .ForeignKey("dbo.MyUsers", t => t.Id)
        .Index(t => t.Id);

    CreateTable(
        "dbo.MyUsers",
        c => new
            {
                Id = c.Int(nullable: false, identity: true),
            })
        .PrimaryKey(t => t.Id);
}

与他的回答相反,我没有观察到单独的 MyUser_Id 外键的创建。 MyUserProfiles.Id 被正确配置为主键和外键。所以任何想要使用这种配置的人都应该尝试一下,但要仔细观察生成的迁移代码。

我的工具集:Visual Studio 2013、EntityFramework 6.1.3 nuget 包。

关于c# - Entity Framework : One to zero relationship,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40635266/

10-11 15:21