繁体   English   中英

实体框架与共享实体的映射

[英]Entity Framework mapping with a shared entity

我有一个名为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_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);
    }

如何执行此映射,使上传的照片既有行程又有目的地?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM