2013-04-26 3 views
0

У меня есть следующий класс:EF - отношение один к одному

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 {получить, установить; } "?

Это очень важно в моем случае для использования позже в классе.

Ps: FinanceiroLancamento не нуждается в FinanceiroLancamentoCaixa, но при наличии FinanceiroLancamentoCaixa ему нужен FinanceiroLancamento.

С уважением.

Wilton Ruffato Wonrath

+0

Умм .. переопределить? Вы классы не извлекаются из чего-либо. –

+0

Извините. Да, они выводятся. FinanceiroLancamento: Identificador, это просто для того, чтобы обманывать каждый класс, чтобы иметь свойство Id. –

+0

Нет необходимости переопределять это свойство, так как оно унаследовано. Возможно, ваше отображение все еще работает. Это может быть причиной вашей проблемы. –

ответ

0

Entity Framework требует, чтобы 1: 1 отображения одни и те же первичный ключ. В вашем случае вы пытаетесь использовать другой элемент в качестве идентификатора отображения. Кроме того, не переопределяйте идентификатор базового класса, просто наследуйте его.

Что вы хотите, это:

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

Entity Framework не позволяет использовать 1: 1, который не является общим первичным ключом, так что вы не можете сделать это в EF. Если вам это абсолютно необходимо, вам может потребоваться сделать это как хранимую процедуру и вызвать ее из EF.

Причина, по которой вы не можете иметь такой 1: 1, так это то, что модель данных позволяет вам установить IdFinanceiroLancamento на один и тот же идентификатор в более чем одной записи, тем самым разбив ваш 1: 1.

В принципе, EF не позволит создавать модели с сопоставлениями, которые допускают нарушение отображения, даже если вы никогда не создаете дубликаты, это все еще возможно. EF не знает об уникальных ограничениях, поэтому размещение уникального ограничения не укажет EF, что все в порядке.

Если вы хотели бы видеть эту функцию, я предлагаю вам проголосовать за него в UserVoice EF:

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

Смежные вопросы