EF - One to one relationship

半腔热情 提交于 2020-01-03 06:06:19

问题


I have the following class:

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; }
}

When I try to map and execute migration it´s return:

Property name 'IdFinanceiroLancamento' was already defined.

To solve this problem I needed to comment idfinanceirolancamento and map like this:

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

The question is: How can I this FK (FinanceiroLancamento -> FinanceiroLancamentoCaixa) keeping the "IdFinanceiroLancamento { get; set; }"?

This is very important in my case to use later in the class.

Ps: FinanceiroLancamento does not need a FinanceiroLancamentoCaixa, but when FinanceiroLancamentoCaixa exists he needs a FinanceiroLancamento.

Best regards.

Wilton Ruffato Wonrath


回答1:


Entity Framework requires that 1:1 mappings share the same primary key. In your case, you are trying to use a different member as the mapping id. Also, do not override the base class id, just inherit it.

What you want Is this:

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

Entity Framework does not allow you to use a 1:1 that is not a shared primary key, so you can't do it in EF. If you absolutely need this, you may have to do it as a stored procedure and call it from EF.

The reason you can't have a 1:1 like this is because the data model allows you to set IdFinanceiroLancamento to the same ID in more than one record, thus breaking your 1:1.

Basically, EF will not allow you to create models with mappings that allow for a violation of the mapping, even if you never create duplicates, it's still a possibility. EF doesn't know about unique constraints either so placing a unique constraint won't tell EF that it's ok.

If you'd like to see this feature, I suggest you vote for it at the EF uservoice:

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



来源:https://stackoverflow.com/questions/16237089/ef-one-to-one-relationship

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!