我有
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/