实体框架5一对一关系(例如用户 - >配置文件) - 模型构建器ASP.NET MVC4

时间:2013-04-09 11:00:12

标签: asp.net-mvc-4 ef-code-first entity-framework-5

我正在尝试对此前的答案执行类似的操作: How to declare one to one relationship using Entity Framework 4 Code First (POCO)

问题是,我是非常新的,我首先使用Entity Framework 5代码而且HasConstraint不再存在,更不用说我不擅长lamda。我想知道是否有人可以帮助扩展这个,所以我可以有效,轻松地将User类映射到Profile类?我需要知道如何为配置文件和模型构建器

执行此操作

每个用户都有一个个人资料

另外,另一个快速问题,即配置文件模型中有列表,我如何有效地将它们放在模型构建器和配置文件中?

谢谢

2 个答案:

答案 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);
            });

 }