2011-09-29 25 views
12

mẫu của tôi:EF-Code đầu tiên loại phức tạp với một tài sản hàng hải

public class Country 
{ 
    public int CountryId { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<User> Users { get; set; } 
} 

public class Location 
{ 
    public string Address { get; set; } 

    public virtual int CountryId { get; set; } 
    public virtual Country Country { get; set; } 
}  

public class User{ 

    protected User() 
    { 
     Location = new Location(); 
    } 

    public int UserId { get; set; } 
    public Location Location { get; set; } 

} 

Khi tạo cơ sở dữ liệu, tôi nhận được:

One or more validation errors were detected during model generation: 

System.Data.Edm.EdmEntityType: : EntityType 'Location' has no key defined. Define the key for this EntityType. 
System.Data.Edm.EdmEntitySet: EntityType: EntitySet �Locations� is based on type �Location� that has no keys defined. 

Làm thế nào để có một tài sản điều hướng bên trong một loại phức tạp? Nếu tôi xóa thuộc tính điều hướng quốc gia, nó hoạt động tốt.

Trả lời

10

Thuộc tính điều hướng (tham chiếu đến các thực thể khác) trên loại phức không được hỗ trợ. Bạn phải tạo Location một thực thể (với bảng riêng) hoặc xóa thuộc tính điều hướng Country từ Location (và thêm thuộc tính [ComplexType] như được Steve Morgan đề cập).

Sửa

tham khảo: http://msdn.microsoft.com/en-us/library/bb738472.aspx

"loại Complex không thể chứa các thuộc tính định hướng"

+0

Nhưng còn về số nguyên 'CountryID' trong lớp' Vị trí' thì sao? Có thể làm cho một ràng buộc khoá ngoại không? (Tôi có một vấn đề tương tự và không thể làm việc đó) –

+0

@Isak: Không, điều đó là không thể. Nếu bạn muốn có FK trong cơ sở dữ liệu, bạn phải làm điều đó trong cơ sở dữ liệu trực tiếp nhưng EF sẽ không phản ánh nó. –

+1

Thực tế là điều này không được hỗ trợ được đề cập trực tiếp trong mô tả loại phức tạp trên MSDN: http://msdn.microsoft.com/en-us/library/bb738472.aspx –

3

EF muốn suy ra khóa chính cho Vị trí, nhưng không thể.

Thêm public int LocationId { get; set; } vào lớp Location và điều đó sẽ rất vui.

Nếu bạn muốn sử dụng Location làm loại phức tạp, hãy chú thích nó bằng thuộc tính [ComplexType].

+0

Điều này sẽ tạo ra một bảng hoàn toàn mới. Tôi muốn nó như một loại phức tạp. –

+0

Xin lỗi - đã chỉnh sửa câu trả lời của tôi - hy vọng nó sẽ giúp ích. –

Các vấn đề liên quan