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

관계를 참조하십시오. ApplicationUser이 경우 .. 외부 키를 가지고 있으며, UserSetting 하나 개의 맵에 하나입니다 ...

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); 

       } 
     } 

난이 도움이되기를 바랍니다 : 다음은 전체 작업 코드입니다.

+0

그는 키를 포함하고있을 가능성이 높은 기본 클래스'IdentityUser'를 가지고 있습니다. 그렇지 않으면 엔티티를 삽입하기 전에 예외가 발생합니다. 귀하의 모델에서 설정없이 사용자를 삽입하는 것이 불가능한 "* 전체 작업 코드 *"로 주장하십니까? – Slauma

+0

@Slauma 그는 기본 클래스 인 IdentityUser에 키가 포함되어 있는지 여부를 언급하지 않았습니다. 그러나 열쇠가 있다면, 그것은 확실히 작동 할 것입니다. – MKMohanty

+0

@Slauma 나는 그가 관계에 문제가 있다고 생각합니다. 이제 사용자 설정없이 관계를 변경했습니다. 응용 프로그램 사용자를 입력 할 수 없습니다.) – MKMohanty

관련 문제