我有一個對象叫做Trip
。 Trip
有很多Destinations
。 Destinations
有很多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_Id
和Destination_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);
}
如何執行此映射,以便我上傳的照片同時具有旅行和目的地?