我正在尝试对此前的答案执行类似的操作: How to declare one to one relationship using Entity Framework 4 Code First (POCO)
问题是,我是非常新的,我首先使用Entity Framework 5代码而且HasConstraint
不再存在,更不用说我不擅长lamda。我想知道是否有人可以帮助扩展这个,所以我可以有效,轻松地将User类映射到Profile类?我需要知道如何为配置文件和模型构建器
每个用户都有一个个人资料
另外,另一个快速问题,即配置文件模型中有列表,我如何有效地将它们放在模型构建器和配置文件中?
谢谢
答案 0 :(得分:0)
e.g。
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)
如果您确实需要Id
中的User
(例如,在添加Profile
时只能通过其ID填写User
- 如果只有一个一个没有真正使用 - 当你创建配置文件和用户时),那么你可以反向...
modelBuilder.Entity<User>()
.HasRequired(x => x.Profile)
.WithOptional();
...而您的ProfileId
实际上在Id
(pk - &gt; pk)。
答案 1 :(得分:0)
该解决方案对我有用
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);
});
}