【问题标题】:Entity Framework mapping with a shared entity实体框架与共享实体的映射
【发布时间】:2016-11-28 05:49:56
【问题描述】:

我有一个名为Trip 的对象。 Trip 有很多 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);
    }

如何执行此映射以使我上传的照片同时包含旅行和目的地?

【问题讨论】:

    标签: c# entity-framework orm


    【解决方案1】:

    我修好了。我加了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);
    

    【讨论】:

      猜你喜欢
      • 2011-10-20
      • 2010-10-09
      • 2017-02-11
      • 2011-03-09
      • 1970-01-01
      • 2014-04-01
      • 2011-08-28
      • 1970-01-01
      • 2011-05-06
      相关资源
      最近更新 更多