Entity framework EF5,继承的FK和基数
我有这样的班级结构: 公共课堂活动 {Entity framework EF5,继承的FK和基数,entity-framework,cardinality,Entity Framework,Cardinality,我有这样的班级结构: 公共课堂活动 { [Key] 公共长活动ID{get;set;} 公共字符串ActivityName{get;set;} 公共虚拟哈希集ActivityLogMessages{get;set;} 公共虚拟哈希集FileImportLogMessages{get;set;} 公共虚拟哈希集RowImportLogMessages{get;set;} } 公共抽象类日志消息 { [必需] 公共字符串消息{get;set;} 公共DateTimeOffset CreateDate
[Key]
公共长活动ID{get;set;}
公共字符串ActivityName{get;set;}
公共虚拟哈希集ActivityLogMessages{get;set;}
公共虚拟哈希集FileImportLogMessages{get;set;}
公共虚拟哈希集RowImportLogMessages{get;set;}
}
公共抽象类日志消息
{
[必需]
公共字符串消息{get;set;}
公共DateTimeOffset CreateDate{get;set;}
[必需]
公共长活动ID{get;set;}
公共虚拟活动活动{get;set;}
}
公共类活动LogMessage:LogMessage
{
公共长活动LogMessageId{get;set;}
}
公共类FileImportLogMessage:ActivityLogMessage
{
公共long?stagefleid{get;set;}
}
公共类RowImportLogMessage:FileImportLogMessage
{
公共long?StageFileRowId{get;set;}
}
这给了我这个,模型
每个消息(活动、文件或行)必须与活动关联。为什么第二级和第三级与ActivityLogMessage的基数不同?我试图描述外键关系(通过modelbuilder流畅)的尝试也失败了
这对我来说是一个真正理解EF如何映射到关系的学术练习,这让我很困惑
问候,,
RichardEF推断出一对导航属性
Activity.ActivityLogMessages
和ActivityLogMessage.Activity
,其外键属性ActivityLogMessage.ActivityId
不可为空,因此根据需要定义关系
其他两个关系是从集合Activity.FileImportLogMessages
和Activity.RowImportLogMessages
推断出来的。它们在另一侧既没有反向导航属性,也没有外键属性,默认情况下,外键属性将导致可选关系
您可能希望LogMessage.Activity
和LogMessage.ActivityId
被用作所有三个集合的反向属性。但它不是这样工作的。EF不能在多个关系中使用相同的导航属性。此外,您当前的模型意味着,例如,RowImportLogMessage
与活动
有三种关系,而不仅仅是一种关系
我相信,如果您删除这些收藏,您将更接近您想要的:
public virtual HashSet<FileImportLogMessage> FileImportLogMessages { get; set; }
public virtual HashSet<RowImportLogMessage> RowImportLogMessages { get; set; }
public virtual HashSet<FileImportLogMessage> FileImportLogMessages { get; set; }
public virtual HashSet<RowImportLogMessage> RowImportLogMessages { get; set; }
var fileImportLogMessages = ActivityLogMessages.OfType<FileImportLogMessage>();
// fileImportLogMessages will also contain entities of type RowImportLogMessage
var rowImportLogMessage = ActivityLogMessages.OfType<RowImportLogMessage>();