2011-10-12 9 views
8

Tôi đã lớp sau:EF Mã Đầu - Thành thạo API (WithRequiredDependent và WithRequiredPrincipal)

public class User 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public Couple Couple { get; set; } 
} 

public class Couple 
{ 
    public Guid Id { get; set; } 
    public User Groom { get; set; } 
    public User Bride { get; set; } 
} 

Những điểm quan trọng:

  1. BrideGroom thuộc tính được yêu cầu
  2. Một mối quan hệ-to-one
  3. Trong lớp User, nó là cần thiết Couple

DbContext trong OnModelCreating

modelBuilder.Entity<User>().HasRequired(u => u.Couple).WithRequiredPrincipal(); 
modelBuilder.Entity<Couple>().HasRequired(u => u.Bride).WithRequiredDependent(); 
modelBuilder.Entity<Couple>().HasRequired(u => u.Groom).WithRequiredDependent(); 

Nhưng tôi không thể yêu cầu!

Tất cả các tệp đều có null trong cơ sở dữ liệu !.

Làm cách nào để lấy các trường trong cơ sở dữ liệu dưới dạng không rỗng? Nếu có thể, hãy sử dụng API Flient.

Trả lời

5

Nó phải được điều này:

modelBuilder.Entity<User>().HasRequired(u => u.Couple).WithRequiredDependent(); 
modelBuilder.Entity<Couple>().HasRequired(u => u.Bride).WithRequiredDependent(); 
modelBuilder.Entity<Couple>().HasRequired(u => u.Groom).WithRequiredDependent(); 

Làm thế nào WithRequiredDependent Làm việc: Cấu hình mối quan hệ để được yêu cầu: yêu cầu mà không có một tài sản chuyển hướng về phía bên kia của mối quan hệ. Loại thực thể đang được định cấu hình sẽ là người phụ thuộc và chứa khóa ngoại cho hiệu trưởng. Các thực thể loại rằng các mục tiêu mối quan hệ sẽ là hiệu trưởng trong mối quan hệ.


Nghĩa: Hãy xem xét dòng đầu tiên của mã ở đây. Nó tạo ra một khóa ngoại trong thực thể được cấu hình (tài) khiến nó là phụ thuộc và làm cho phía bên kia của mối quan hệ (Couple) Principal


Chú ý: Don Bạn nghĩ rằng cấu hình bạn mong muốn sẽ tạo ra một bế tắc? Tôi đã không thử nghiệm mã trên, nhưng cấu hình này có vẻ là một bế tắc với tôi vì vậy tôi không chắc chắn nếu EF sẽ cho phép bạn tạo ra nó. Người dùng phải cần một Cặp đôi và Cặp đôi phải cần cùng một người dùng mà tôi đoán.