我有以下课程:
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"));
问题是: 我怎么能保持“IdFinanceiroLancamento {get; set;}”这个FK(FinanceiroLancamento - &gt; FinanceiroLancamentoCaixa)?
在我的案例中,这对于稍后在课堂上使用非常重要。
Ps:FinanceiroLancamento不需要FinanceiroLancamentoCaixa,但当FinanceiroLancamentoCaixa存在时,他需要一个FinanceiroLancamento。
最好的问候。
Wilton Ruffato Wonrath
答案 0 :(得分:0)
实体框架要求1:1映射共享相同的主键。在您的情况下,您尝试使用其他成员作为映射ID。另外,不要覆盖基类id,只需继承它。
你想要的是这个:
.HasRequired(e => e.FinanceiroLancamentoCaixa)
.WithRequiredPrincipal();
实体框架不允许您使用不是共享主键的1:1,因此您无法在EF中执行此操作。如果你绝对需要这个,你可能必须把它作为一个存储过程,并从EF调用它。
你不能拥有这样的1:1的原因是因为数据模型允许你将IdFinanceiroLancamento设置为多个记录中的相同ID,从而打破你的1:1。
基本上,EF不允许您创建具有允许违反映射的映射的模型,即使您从不创建重复项,它仍然是可能的。 EF不知道唯一约束,因此放置一个唯一约束不会告诉EF它没关系。
如果你想看到这个功能,我建议你在EF uservoice投票: