0

У меня есть три объекта с именем SellinRequest, MortgageAndRent и Album. У каждого из SellinRequest и MortgageAndRent может быть Альбом.Как сопоставить две связи Один или от нуля до нуля

public class SellingRequest 
{ 
    public int Id { get; set; } 
    public Album Album { get; set; } 
} 

public class MortgageAndRent 
{ 
    public int Id { get; set; } 
    public Album Album { get; set; } 
} 

public class Album 
{ 
    public int Id { get; set; } 
    public SellingRequest SellingRequest { get; set; } 
    public int SellingRequestId { get; set; } 

    public MortgageAndRent MortgageAndRent { get; set; } 
    public int MortgageAndRentId { get; set; } 

    public List<Photo> Photos { get; set; } 
} 

Это логика я хочу быть реализованы:

  • (SellingRequest 1 .... 0-1 альбом)
  • (MortgageAndRent 1 .... 0-1 Альбом)

С помощью этих отображений:

public class SellingRequestMap : EntityTypeConfiguration<SellingRequest> 
{ 
    public SellingRequestMap() 
    { 
     this.ToTable("SellingRequest"); 
     this.HasKey(sR => sR.Id); 

     // Each SellingRequest may have one Album. (SellingRequest 1 .... 0-1 Album) 
     this.HasOptional(sR => sR.Album).WithOptionalPrincipal(a => a.SellingRequest).WillCascadeOnDelete(false); 
    } 
} 

public RentAndMortgageMap() 
    { 
     this.ToTable("MortgageAndRent"); 
     this.HasKey(mR=>mR.Id); 

     // Each MortgageAndRent may have one Album. (MortgageAndRent 1 .... 0-1 Album) 
     this.HasOptional(sM => sM.Album).WithOptionalPrincipal(a => a.MortgageAndRent).WillCascadeOnDelete(false); 
    } 

Но я не смог получить результат. Я не знаю, как связать эти две таблицы с альбомом!

+0

Ваше предприятие Альбом не имеет ключа определен. Также после «WithOptionalPrincipal» я бы рекомендовал «MapKey» указать на внешний ключ. –

+0

Не совсем понятно, о чем вы говорите * Но я не смог получить результат *. –

+0

@ Милос Миятович Большое спасибо за то, что вы меня запомнили. В исходном коде у меня есть Id, но я забыл написать Id здесь. –

ответ

0

Вот как я буду делать это без синтаксиса. Обратите внимание на новые идентификаторов полей и что я обозначил свойства альбома, как виртуального

public class SellingRequest 
{ 
    public int Id { get; set; } 
    public int AlbumId {get;set;} 

    public virtual Album Album { get; set; } 
} 

public class MortgageAndRent 
{ 
    public int Id { get; set; } 
    public int AlbumId {get;set;} 

    public virtual Album Album { get; set; } 
} 

public class Album 
{ 
    public int Id { get; set; } 

    public int SellingRequestId { get; set; } 
    public int MortgageAndRentId { get; set; } 

    public virtual SellingRequest SellingRequest { get; set; } 
    public virtual MortgageAndRent MortgageAndRent { get; set; } 

    public virtual List<Photo> Photos { get; set; } 
} 
+0

Привет @jhilden. Спасибо за Ваш ответ. Я изменил код так, как вы предлагали, со своим собственным сопоставлением (сопоставление рассматривается выше). Но я получаю эту ошибку: «Невозможно вставить значение NULL в столбец« Id », таблицу« RealEstateV1Database1.dbo.Album »; столбец не допускает нулей. INSERT терпит неудачу. \ R \ nПриложение завершено."} Хотя у меня есть поместите эту строку кода в картографию альбома: this.HasKey (a => a.Id); this.Property (a => a.Id) .HasDatabaseGeneratedOption (DatabaseGeneratedOption.Identity); –

+0

Могу ли я теперь рассказать вам о сопоставлениях? –