如何将实体映射到多个表并具有导航属性?

时间:2013-02-06 18:59:26

标签: entity-framework

我首先使用数据库创建了EMDX,我已经按照here描述的示例,所以现在我可以将一个实体映射到我的数据库中的多个表,这样就可以了。

但是我还需要拥有FK在这个实体的表上提供的导航属性,我怎么能实现呢?

我有两个表,名为Carteira,另一个名为Ativo,在我的EMDX中,我希望Ativo的属性也可以在Carteira上,因为它们之间有0:1的关系,所以我已经这样做了工作中! :)但我也希望Ativo类中的导航属性在Carteira上

请参阅描述属性的示例:

    class Ativo
    {
        public string Id { get; set; }
        public IList<Valor> Valores { get; set; }
    }

    class Carteira
    {
        public string AtivoID { get; set; }
        public Ativo Ativo {get; set;}
    }

所以我希望有类似的东西 Carteira.Valores(这应该来自Ativo)。

请注意,我不想手动使用部分类和导航进行此代码,我已经完成了这个,我不喜欢这种方法,它看起来像这样:

    public partial class Carteira
    {
        public List<Valor> Valores
        {
            get
            {
                if (this.Ativo == null)
                    return null;
                return this.Ativo.Valores;
            }
        }
    }

我想知道如何仅使用EMDX来实现这一点,这与简单属性的方法相同,这可能吗?

2 个答案:

答案 0 :(得分:1)

对于0:1到1的关系,EF要求外键与从属表上的主键相同。所以Ativo类必须具有与AtivoID同名的主键,并且它也应该是外键。

答案 1 :(得分:1)

我设法让导航以两种不同的方式工作:

1 - 在模型上创建“关联”(EMDX)。 这些关联就好像它们是真正的FK一样,并且因为我已经在两侧都有映射列,所以可以通过执行这些步骤来完成:

在Carteira(二级课程)创建一个新协会,该协会反映了Ativo(第一级)中出现的FK的相同属性。完成后,将在两个类上创建导航属性

2-使用每类型表继承

在这个特定场景中,该类实际上可以从另一个继承,然后使用所有导航,为此,我必须实现TBT继承,更改表并向两者添加“条件映射”模型(EDMX)上的表格(具体和继承)