【问题标题】: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
【问题描述】:

我正在尝试做与之前的答案类似的事情: How to declare one to one relationship using Entity Framework 4 Code First (POCO)

问题是,我对此很陌生,我首先使用实体​​框架 5 代码,HasConstraint 不再存在,更不用说我不擅长 lamda。我想知道是否有人可以帮助扩展这一点,以便我可以有效轻松地将 User 类映射到 Profile 类?我需要知道如何为配置文件和模型构建器执行此操作

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

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

谢谢

【问题讨论】:

    标签: 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);
                  });
      
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-19
        • 1970-01-01
        • 1970-01-01
        • 2016-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-24
        相关资源
        最近更新 更多