在多个不同实体之间创建单个实体的单向关系

时间:2013-07-28 11:22:36

标签: c# entity-framework-5 foreign-key-relationship

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

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

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关系?我已经尝试了RequiredForeignKeyInversePropertyAssociation attibutes(以及其他我已经忘记的)没有运气。

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

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

1 个答案:

答案 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具有不可为空的类型。