【问题标题】:Entity Framework 5 One to One relationship (e.g. User -> Profile) - ModelBuilder ASP.NET MVC4实体框架 5 一对一关系(例如用户 -> 配置文件) - ModelBuilder ASP.NET MVC4
【发布时间】:2013-04-09 11:00:12
【问题描述】:
【问题讨论】:
标签:
asp.net-mvc-4
ef-code-first
entity-framework-5
【解决方案1】:
例如
public class User
{
public int Id { get; set; }
public string Username { get; set; }
public Profile Profile { get; set; }
// public int ProfileId { get; set; }
}
public class Profile
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string PostalCode { get; set; }
}
// ...
modelBuilder.Entity<User>()
.HasOptional(x => x.Profile)
.WithRequired();
ProfileId 没用,FK 在“围栏的另一边”(Profile)。
(这是最有意义的 IMO)
如果您在User 中确实需要一个Id(例如,在添加User 时能够仅通过其ID 填写Profile - 如果没有真正使用一对一 - 就像你同时创建个人资料和用户),然后您可以反转...
modelBuilder.Entity<User>()
.HasRequired(x => x.Profile)
.WithOptional();
...而您的 ProfileId 实际上在 Id (pk -> pk) 中。
【解决方案2】:
那个解决方案对我有用
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ApplicationUser>(entity =>
{
entity.HasKey(e => e.Id);
entity.Property(e => e.Id).HasMaxLength(450);
entity.HasOne(d => d.Profile).WithOne(p => p.User);
});
modelBuilder.Entity<UserProfile>(entity =>
{
entity.HasKey(e => e.Id);
entity.Property(e => e.Id).HasMaxLength(450);
entity.Property(e => e.Type)
.HasMaxLength(10)
.HasColumnType("nchar");
entity.HasOne(d => d.User).WithOne(p => p.Profile);
});
}