我创建了一个(虚拟)数据库视图,名为; vContact和一个返回与视图相同类型的存储过程(如果我应该做我需要的话,视图会太复杂)。当我调用存储过程时,我得到一个ContactI对象,其中CompanyId已填充但Company对象显示(在Visual Studio中观察时):
发生了关系多重性约束违规:EntityReference只能有一个相关对象,但查询返回了多个相关对象。这是一个不可恢复的错误。
我正在使用数据库优先的approch ...我认为我必须做一些流畅的配置?我认为这是关于我正在使用“封装”视图类,因此反转对象的类型不同?
以下是我的目标:
[Table("vContact")]
public class ContactView : Contact
{
// …
}
[Table("Contact")]
public class Contact
{
[Key]
public Guid Id { get; set; }
// …
[Required]
public int CompanyId { get; set; }
public virtual Company Company { get; set; }
public virtual ICollection<Activity> Activities { get; set; }
}
[Table("Company")]
public class Company
{
[Key]
public int Id { get; set; }
// …
public virtual ICollection<Contact> Contacts { get; set; }
public virtual ICollection<Activity> Activities { get; set; }
}
[Table("Activity")]
public class Activity
{
[Key]
public Guid Id { get; set; }
// …
[Required]
public int CompanyId { get; set; }
public virtual Company Company { get; set; }
}
我的目标是获取一个ContactView对象,其中包含填充联系人和活动,但公司只需要包含“基础” - 而不是所有引用公司的联系人和活动。
但是,当使用另一个存储过程的vCompany视图查询公司的活动和活动时,属性必须存在于公司对象上。
PS。我获得了联系人和活动的等效视图和存储过程