2016-02-04 6 views
0

Я пытаюсь создать отношение нуля к одному с первой структурой сущности кода. При примере кода ниже, я получаю сообщение об ошибке:нулевой к одному объекту отношения отношения

Unable to determine the principal end of an association between the types 'CompanyView' and 'MemberView'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations.  

С этой ошибкой, я попытался добавил в конфигурацию, чтобы исправить это.

modelBuilder.Entity<CompanyView>().HasOptional(x => x.MemberView).WithOptionalPrincipal(x => x.CompanyView); 

Который закончил с другим сообщением об ошибке.

CompanyView_MemberView_Target: : Multiplicity is not valid in Role 'CompanyView_MemberView_Target' in relationship 'CompanyView_MemberView'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be '*'. 

У кого-нибудь есть идеи по поводу того, что здесь происходит? Спасибо.

public class CompanyView 
{ 
    [Key] 
    public Guid Id { get; private set; } 

    public Guid? MemberId { get; private set; } 

    [ForeignKey("MemberId")] 
    public MemberView MemberView { get; private set; } 
} 

public class MemberView 
{ 
    [Key] 
    public Guid Id { get; private set; } 

    public Guid? CompanyId { get; private set; } 

    [ForeignKey("CompanyId")] 
    public CompanyView CompanyView { get; private set; } 
} 

Конечный результат я бы ожидать, как показано ниже: MemberView может иметь 0 или 1 CompanyView, каждый CompanyView может иметь от 0 до 1 MemberView.

+0

Возможный дубликат [Можно ли зафиксировать отношения 0..1 до 0..1 в Entity Framework?] (Http : //stackoverflow.com/questions/21889367/is-it-possible-to-capture-a-0-1-to-0-1-relationship-in-entity-framework) –

+0

Пробовал решение по ссылке, код ниже исправить мою проблему. modelBuilder.Entity () .HasOptional (x => x.MemberView) .WithMany(). HasForeignKey (x => x.MemberId); modelBuilder.Entity () .HasOptional (x => x.CompanyView) .WithMany(). HasForeignKey (x => x.CompanyId); –

ответ

0

Отношения, как вы указали, необычны (один или ноль в обоих направлениях). Вы пытаетесь создать внешние ключи в обеих таблицах, в результате у вас есть неразрешимый цикл. Вы можете легко создать отношение один или ноль, если один объект является основным, а один - зависимым. Вы можете попытаться смоделировать желаемое отношение через многие отношения. Также вы можете не комментировать поля с атрибутами внешнего ключа, в результате у вас не будет никаких преимуществ, но вы сможете гибко манипулировать отношениями вручную самостоятельно. В конце я демонстрирую отношение, где, например, MemberView является зависимой таблицей:

public class CompanyView 
{ 
    [Key] 
    public Guid Id { get; private set; }   
    public MemberView MemberView { get; private set; } 
} 

public class MemberView 
{   
    [Key, ForeignKey("CompanyView")] 
    public Guid CompanyId { get; private set; }   
    public CompanyView CompanyView { get; private set; } 
} 
+0

Созданные объекты не то, что я ожидаю. Но спасибо за ваши отзывы. –

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