2014-02-20 217 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