首先要做的事情;我已经用我能想到的所有术语搜索了所有的答案,所以如果我以更好的方式被问到我道歉。
假设我有一个拥有某种非特定于实体的元数据的实体:
public class MetaData
{
public int Id { get; set; }
public string SomeProperty { get; set; }
}
这是由不同的实体引用的:
public class SomeEntity
{
[???]
public string MetaDataId { get; set; }
}
public class CompletelyDifferentEntity
{
[???]
public string MetaDataId { get; set; }
}
有没有我可以替换的属性???有了这将以代码优先的方式工作?我是否必须向每个对象添加一个MetaData属性才能告知EF关系?我已经尝试了Required
,ForeignKey
,InverseProperty
,Association
attibutes(以及其他我已经忘记的)没有运气。
如果我需要回退到流畅的API来设置它,可以在元数据实体上设置还是需要单独为每个实体指定?
NB :如果我从不需要实际检索MetaData属性,答案会有所不同吗?即id仅用于分组?
答案 0 :(得分:0)
为了将外键关系映射到模型,您需要在两个相关实体中的至少一个中使用导航属性,即...
public class MetaData
{
public int Id { get; set; }
public string SomeProperty { get; set; }
public ICollection<SomeEntity> SomeEntities { get; set; }
public ICollection<CompletelyDifferentEntity>
CompletelyDifferentEntities { get; set; }
}
...或...
public class SomeEntity
{
//...
public int MetaDataId { get; set; }
public MetaData MetaData { get; set; }
}
public class CompletelyDifferentEntity
{
//...
public int MetaDataId { get; set; }
public MetaData MetaData { get; set; }
}
使用这些属性名称数据注释不是必需的,因为EF会将MetaDataId
识别为MetaData
导航属性的外键属性。这些关系将是必需的(非可选),因为MetaDataId
具有不可为空的类型。