1

我首先使用数据库创建了 EMDX,我遵循了此处描述的示例,所以现在我可以将一个实体映射到我的数据库中的多个表,这工作正常。

但是我还需要在这个实体的表上提供 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 来实现这一点,就像简单属性可以做到的那样,这可能吗?

4

2 回答 2

1

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

于 2013-02-06T19:20:05.703 回答
1

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

1 - 在模型 (EMDX) 上创建一个“关联”。 这些关联就像它们是实际的 FK 一样工作,并且由于我已经在两侧都有映射列,因此可以通过执行以下步骤来完成:

在 Carteira(第二级)创建一个新的关联,它反映了 Ativo(第一级)中存在的 FK 的相同属性。完成后,将在两个类上创建导航属性

2- 使用 Table-Per-Type 继承

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

于 2013-07-03T13:06:43.947 回答