1

首先要做的事;我已经使用我能想到的所有术语搜索了所有答案,所以如果以更好的方式询问它,我会道歉。

假设我有一个包含某种非实体特定元数据的实体:

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 属性(以及我忘记的其他属性),但没有运气。

如果我需要回退到 fluent API 来设置它,可以在元数据实体上设置它还是需要为每个实体单独指定?

注意:如果我从不需要实际检索 MetaData 属性,答案是否会有所不同?即 id 仅用于分组?

4

1 回答 1

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 会将其识别MetaDataIdMetaData导航属性的外键属性。这些关系将是必需的(不是可选的),因为MetaDataId具有不可为空的类型。

于 2013-07-28T12:16:26.657 回答