2016-11-27 296 views
0

我有一個對象叫做TripTrip有很多DestinationsDestinations有很多Photos(可選)。但是,Trip也可以從Destinations之一獲得Photo使用共享實體的實體框架映射

一個Photo可以用作行程封面照片,以及封面照片爲目的,因此而不是讓用戶上傳照片相同兩次,我對Photo兩個屬性:IsTripCoverPhoto和IsDestinationCoverPhoto。

所以,Photo看起來是這樣的:

public partial class Photo : Entity 
{ 
    public Photo() 
    { 
     Id = GuidComb.GenerateComb(); 
    } 

    public Guid Id { get; set; } 
    public virtual Destination Destination { get; set; } 
    public virtual Trip Trip { get; set; } 
    public bool IsTripCoverPhoto { get; set; } 
    public bool IsDestinationCoverPhoto { get; set; } 
} 

這是我Trip映射:

public class TripMapping : EntityTypeConfiguration<Domain.DomainModel.Entities.TripModels.Trip> 
{ 

    public TripMapping() 
    { 
     HasKey(x => x.Id); 
     Property(x => x.Id).IsRequired(); 
     HasOptional(t => t.User).WithMany(t => t.Trips).WillCascadeOnDelete(false); 
     HasRequired(x => x.Settings); 
     HasMany(x => x.Destinations).WithRequired(x => x.Trip).Map(x => x.MapKey("Trip_Id")).WillCascadeOnDelete(false); 
     // HasOptional(x => x.Photo).WithRequired(x=>x.Trip).Map(x=>x.MapKey("Trip_Id")).WillCascadeOnDelete(false); 
     HasOptional(t => t.Photo).WithRequired(x => x.Trip).Map(m => m.MapKey("Trip_Id")).WillCascadeOnDelete(false); 


} 

這是我Destination映射:

public DestinationMapping() 
{ 
     HasKey(x => x.Id); 
     Property(x => x.Id).IsRequired(); 
     HasMany(x => x.Activities).WithRequired(x => x.Destination); 
     HasMany(x => x.Photos).WithRequired(x => x.Destination).Map(x => x.MapKey("Destination_Id")).WillCascadeOnDelete(false); 
    } 
} 

照片上傳工作正常,如果我添加到TripMapping

HasOptional(x => x.Photo).WithOptionalPrincipal(x=>x.Trip); 

我得到被添加到數據庫中的記錄上傳,但只有第一張照片有Trip_Id ......所有後續記錄插入與NO Trip_Id。我絕對會加入照片的目的地和旅程,並且我一直追蹤它到何時添加它,並且沒有我能說的問題。我真的認爲這與我的地圖有關,但我不知道它是什麼!

我已經想盡一切 - 這路映射,但不能爲我的生活讓我的網站中插入照片到數據庫既具有Trip_IdDestination_Id ...

我嘗試添加映射到照片:

public PhotoMapping() 
    { 
     HasKey(x => x.Id); 
     Property(x => x.Id).IsRequired(); 

     HasRequired(x=>x.Trip).WithOptional(x=>x.Photo).Map(x=>x.MapKey("Trip_Id")).WillCascadeOnDelete(false); 
     HasRequired(x => x.Destination).WithMany(x=>x.Photos).Map(x => x.MapKey("Destination_Id")).WillCascadeOnDelete(false); 
    } 

如何執行此映射,以便我上傳的照片同時具有旅行和目的地?

回答

0

我修好了。我加入TripMapping

HasOptional(x => x.Photo).WithMany().Map(x => x.MapKey("Trip_Id")); 

不知道爲什麼上述作品,但下面不...

HasOptional(t => t.Photo).WithRequired(x => x.Trip).Map(m => m.MapKey("Trip_Id")).WillCascadeOnDelete(false);