2013-04-16 31 views
5

Tôi đã các đối tượng miền sau:EF 5.0 Đa dạng Lỗi Trên Simple Mapping

public class Person 
{ 
    public int Id {get; set;} 
    public int? FatherId {get; set;} 
    public int? MotherId {get; set;} 
    public int? HomeChurchId {get; set;} 
    public int? BirthCountryId {get; set;} 

    public Parent Father {get; set;} 
    public Parent Mother {get; set;} 
    public Church HomeChurch {get; set;} 
    public Country BirthCountry {get; set;} 
} 

public class Parent 
{ 
    public int Id {get; set;} 
    ... 
} 

public class Church 
{ 
    public int Id {get; set;} 
    ... 
} 

public class Country 
{ 
    public int Id {get; set;} 
    ... 
} 

Khi lập bản đồ Person, tất cả các đặc tính này được ánh xạ khá nhiều theo cùng một cách:

HasOptional(p => p.Father).WithMany().HasForeignKey(p => p.FatherId); 
HasOptional(p => p.BirthCountry).WithMany().HasForeignKey(p => p.BirthCountryId);  
... 

Vấn đề là , với BirthCountry tôi nhận được lỗi sau khi tôi cố truy vấn Người:

One or more validation errors were detected during model generation: 

System.Data.Entity.Edm.EdmAssociationType: : Multiplicity conflicts with the 
referential constraint in Role 'Person_BirthCountry_Target' in relationship 
'Person_BirthCountry'. Because all of the properties in the Dependent Role are 
non-nullable, multiplicity of the Principal Role must be '1'. 

Nếu tôi xóa B irthCountry tài sản (và lập bản đồ) tất cả mọi thứ hoạt động tốt. Điều gây nhầm lẫn với tôi là BirthCountry được thiết lập giống như mọi thuộc tính không có giá trị khác trong Person. Tại sao các thuộc tính khác không cho tôi lỗi tương tự?

Cảm ơn bạn vì bất kỳ trợ giúp nào bạn có thể cung cấp!

Trả lời

11

Sự thiếu hiểu biết không phải là phúc lạc ... nó chỉ đơn giản là bực bội.

Cuối cùng tôi đã nhận ra rằng tôi có thuộc tính [Bắt buộc] trên BirthCountryId. Điều này đã gây ra vấn đề ... hoàn toàn hợp lý. Tôi không thể nói với EF là tùy chọn và yêu cầu của nó cùng một lúc.

Hy vọng điều này sẽ cứu người khác khỏi cùng một sự thất vọng mà tôi đã trải qua.

+0

Tôi vẫn đang tìm cách thêm thuộc tính [Bắt buộc] vào ForeignKeyField. Bạn có câu trả lời để sửa lỗi này không? – MasterLuV

+0

Thực ra, lỗi của tôi là ** vì ** thuộc tính '[Bắt buộc]'. Việc xóa thuộc tính đã khắc phục được sự cố của tôi. Vấn đề là, bạn không thể khai báo nó như là một hàm có giá trị rỗng (ngụ ý rằng nó là nullable và do đó không bắt buộc) và thêm một thuộc tính cho EF biết rằng nó là bắt buộc. Nếu nó được yêu cầu, thì bạn không nên khai báo nó là một int vô giá trị. – RHarris

+0

Tôi biết rằng loại bỏ [Bắt buộc] thuộc tính sau đó tất cả mọi thứ hoạt động tốt. Nhưng trên thực tế, chuỗi là vô giá trị, chúng có thể không có khả năng rỗng trong EF với thuộc tính [Bắt buộc]. Và chúng ta có thể lấy ErrorMessage khi chúng rỗng hoặc rỗng – MasterLuV