0

我有以下课程:

public class FinanceiroLancamento
{
    /// <summary>Identificação</summary>
    public override int Id { get; set; }

    /// <summary>Financeiro caixa</summary>
    public FinanceiroLancamentoCaixa FinanceiroLancamentoCaixa { get; set; }
}

public class FinanceiroLancamentoCaixa
{
    /// <summary>Identificação</summary>
    public override int Id { get; set; }

    /// <summary>Identificação do lançamento financeiro</summary>        
    public int IdFinanceiroLancamento { get; set; }
}

当我尝试映射并执行迁移时,它返回:

已定义属性名称“IdFinanceiroLancamento”。

为了解决这个问题,我需要像这样评论 idfinanceirolancamento 和地图:

        HasRequired(e => e.FinanceiroLancamentoCaixa)
            .WithRequiredPrincipal()
            .Map(m => m.MapKey("IdFinanceiroLancamento"));

问题是:我怎样才能让这个 FK (FinanceiroLancamento -> FinanceiroLancamentoCaixa) 保持“IdFinanceiroLancamento { get; set; }”?

在我的案例中,这对于稍后在课堂上使用非常重要。

Ps:FinanceiroLancamento 不需要 FinanceiroLancamentoCaixa,但是当 FinanceiroLancamentoCaixa 存在时,他需要 FinanceiroLancamento。

此致。

威尔顿·鲁法托·沃拉斯

4

1 回答 1

0

Entity Framework 要求 1:1 映射共享相同的主键。在您的情况下,您正在尝试使用不同的成员作为映射 ID。另外,不要覆盖基类 id,只需继承它。

你想要的是这个:

.HasRequired(e => e.FinanceiroLancamentoCaixa)
.WithRequiredPrincipal();

实体框架不允许您使用不是共享主键的 1:1,因此您不能在 EF 中执行此操作。如果您绝对需要它,您可能必须将其作为存储过程执行并从 EF 调用它。

你不能有这样的 1:1 的原因是因为数据模型允许你在多个记录中将 IdFinanceiroLancamento 设置为相同的 ID,从而打破了你的 1:1。

基本上,EF 不允许您使用允许违反映射的映射创建模型,即使您从不创建重复项,这仍然是可能的。EF 也不知道唯一约束,因此放置唯一约束不会告诉 EF 没关系。

如果你想看到这个功能,我建议你在 EF 用户之声投票:

http://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/suggestions/1050579-unique-constraint-ie-candidate-key-support

于 2013-04-26T14:41:47.417 回答