Gần đây, chúng tôi đã nâng cấp phần mềm của chúng tôi lên .NET 4.0 và EF 4.0 (không có các thực thể tự theo dõi) (trước đây là .NET 3.5 SP1). Bây giờ một ngoại lệ mới được nêu ra trong mã làm việc trước đây, mà chúng ta không hiểu.EntityFramework 4.0: InvalidOperationExeception: Ràng buộc đa dạng vi phạm
Chúng tôi có một thực thể được gọi là Thường trú và một thực thể khác gọi là ResidentExtension, mở rộng thực thể Cư trú đã lớn với mối quan hệ 1 đến (0/1). Mã C# sau đây tạo ra một thực thể mới trong ứng dụng của chúng tôi:
Residents resident = new Residents()
{
IsNewResident = true,
ResidentImage = Settings.Default.ResidentCardDefaultMaleImage,
IsActive = true,
ResidentCanBeDeleted = true,
ResidentExtensions = new ResidentExtensions(),
ResidentMasterDataState = EvoState.Error,
ResidentBasicDataState = EvoState.Error,
ResidentBenefactorsDataState = EvoState.Error,
};
Trường hợp ngoại lệ sau đây được nêu ra ngay sau khi tuyên bố này:
Multiplicity hạn chế vi phạm. Vai trò 'ResidentExtensions' của mối quan hệ VOCURA.EntityDataModels.EvocuraCarehomeManagementEntityModel.FK_ResidentExtensions_Residents 'có bội số 1 hoặc 0..1.
Nó xảy ra trong setter của mã được tạo:
[XmlIgnoreAttribute()]
[SoapIgnoreAttribute()]
[DataMemberAttribute()]
[EdmRelationshipNavigationPropertyAttribute("EVOCURA.EntityDataModels.EvocuraCarehomeManagementEntityModel", "FK_ResidentExtensions_Residents", "ResidentExtensions")]
public ResidentExtensions ResidentExtensions
{
get
{
return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<ResidentExtensions>("EVOCURA.EntityDataModels.EvocuraCarehomeManagementEntityModel.FK_ResidentExtensions_Residents", "ResidentExtensions").Value;
}
set
{
((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<ResidentExtensions>("EVOCURA.EntityDataModels.EvocuraCarehomeManagementEntityModel.FK_ResidentExtensions_Residents", "ResidentExtensions").Value = value;
}
}
Giải pháp duy nhất tôi đã tìm thấy chưa là để gửi đơn vị thường trú mà không mở rộng đầu tiên, và sau này, tạo ra một ResidentExtension với thiết lập khóa ngoài (ResidentID) và thêm nó vào ngữ cảnh và gửi lại. Nhưng đây không phải là cách nó hoạt động trước đây.
Có ai biết cách làm cho công việc này trở lại theo cách cũ không?
Jan, bạn đã bao giờ giải quyết vấn đề này theo cách bạn muốn nó hoạt động chưa? –
Thật không may là không. Vẫn sử dụng giải pháp được tìm thấy trong phần cuối của câu hỏi của tôi, ( – JanW