2014-02-20 169 views
2

我试图设置User表和UserSettings表之间的一对一关系。HasRequired为什么不能正常工作?

尽管指定了“HasRequired”关系,但我仍然可以在没有任何设置的情况下插入用户。我哪里错了?

public class ApplicationUser : IdentityUser 
{ 
    public ApplicationUser() 
    { 
     // Settings = new UserSettings(); 
    } 

    public string EmailAddress { get; set; } 

    public virtual UserSettings Settings { get; set; } 
} 

public class UserSettings 
{ 
    [Key] 
    public string ApplicationUserId { get; set; } 

    public virtual ApplicationUser ApplicationUser { get; set; } 
} 


public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext() 
    : base("DefaultConnection") 
    { 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 

     modelBuilder.Entity<ApplicationUser>().HasRequired(t => t.Settings).WithRequiredPrincipal(t => t.User); 
    } 
} 
+0

你在哪里实现了'OnModelCreating()'方法? –

+0

当你说“能够插入”时,你的意思是什么?你的代码是什么,发生了什么,以及你期望发生什么? –

+0

你是否在应用的派生DbContext中重写'OnModelCreating()'?如果没有,你应该在那里做。 –

回答

1

查看关系。 下面是完整的工作代码:

public class ApplicationUser 
     { 
      public ApplicationUser() 
      { 
       // Settings = new UserSettings(); 
      } 
       [Key] 
      public string Id { get; set; } //could be from the base class 
      public string EmailAddress { get; set; } 

      public virtual UserSettings Settings { get; set; } 
     } 

     public class UserSettings 
     { 
      [Key] 
      public string ApplicationUserId { get; set; } 

      public virtual ApplicationUser ApplicationUser { get; set; } 
     } 

    public class Context : DbContext 
      { 
       protected override void OnModelCreating(DbModelBuilder modelBuilder) 
       { 
        base.OnModelCreating(modelBuilder); 

        modelBuilder.Entity<UserSettings>() 
            .HasRequired(t => t.ApplicationUser) 
            .WithRequiredPrincipal(t => t.Settings); 

       } 
     } 

我希望这有助于... ApplicationUser有一个外键。在这种情况下,是一对一的映射与UserSetting。

+0

他有一个基类“IdentityUser”,它很可能包含密钥。否则,他甚至会在尝试插入实体之前得到异常。您是否声称使用“*完整工作代码*”在您的模型中插入没有设置的用户是不可能的? – Slauma

+0

@Slauma他没有提到他的基类IdentityUser,如果它包含一个键或不。但如果有钥匙里面,它肯定会工作.. – MKMohanty

+0

@Slauma我认为他有关系的问题..现在我改变了关系,现在没有用户设置,它不可能进入应用程序用户;) – MKMohanty