【问题标题】:Unable to determine the principal end of the 'Vehicle_VehicleClass' relationship. Multiple added entities may have the same primary key无法确定“Vehicle_VehicleClass”关系的主体端。多个添加的实体可能具有相同的主键
【发布时间】:2015-02-17 02:57:44
【问题描述】:

不确定为什么从 VehicleClass 到 Vehicle 的 1:N 关系不起作用。 尝试了不同的映射,如下面的注释代码。我已经完成了其他 1:N 关系。不知道这个有什么不同。

        modelBuilder.Entity<Vehicle>()
            .HasRequired(x => x.VehicleClass)
            .WithMany(x => x.Vehicles)
            .HasForeignKey(x => x.VehicleClassId)
            .WillCascadeOnDelete(false);

        //modelBuilder.Entity<VehicleClass>()
        //    .HasMany(x => x.Vehicles)
        //    .WithRequired(x => x.VehicleClass)
        //    .HasForeignKey(x => x.VehicleClassId)
        //    .WillCascadeOnDelete(false);

        //modelBuilder.Entity<Vehicle>()
        //    .HasRequired(x => x.VehicleClass)
        //    .WithRequiredPrincipal()
        //    .WillCascadeOnDelete(false);

        //modelBuilder.Entity<Vehicle>()
        //    .HasOptional(x => x.VehicleClass)
        //    .WithOptionalPrincipal();
        //    .WillCascadeOnDelete(false);

        //modelBuilder.Entity<Vehicle>()
        //    .HasRequired(x => x.VehicleClass)
        //    .WithRequiredDependent()
        //    .WillCascadeOnDelete(false);

        //modelBuilder.Entity<Vehicle>()
        //    .Ignore(x => x.VehicleClass);

DomainBase.cs

public abstract class DomainBase : IEntity
{
    public virtual int Id { get; set; }
    public virtual bool IsDeleted { get; set; }

    public virtual DateTime CreatedDate { get; set; }
    public virtual int CreatedByUserId { get; set; }

    public virtual DateTime? LastModifiedDate { get; set; }
    public virtual int? LastModifiedByUserId { get; set; }

    public virtual void ConvertDatesToGmt()
    {
        this.CreatedDate = this.CreatedDate.UtcToGmt();

        if (this.LastModifiedDate.HasValue)
        {
            this.LastModifiedDate = this.LastModifiedDate.Value.UtcToGmt();
        }
    }
}

VehicleClass.cs

public class VehicleClass : DomainBase
{
    public virtual string ClassName { get; set; }
    public virtual string Make { get; set; }
    public virtual string Model { get; set; }
    public virtual string ModelVariant { get; set; }
    public virtual string Configuration { get; set; }
    public virtual string ProductionName { get; set; }
    public virtual DateTime? ProductionStartDate { get; set; }
    public virtual DateTime? ProductionEndDate { get; set; }
    public virtual int? GrossVehicleWeightKg { get; set; }
    public virtual decimal? WidthMeters { get; set; }
    public virtual decimal? LengthMeters { get; set; }
    public virtual decimal? HeightMeters { get; set; }
    public virtual Int16? WheelbaseMm { get; set; }
    public virtual Int16? PayloadRangeLowKg { get; set; }
    public virtual Int16? PayloadRangeHighKg { get; set; }
    public virtual bool IsHGV { get; set; }

    public virtual IList<Vehicle> Vehicles { get; set; }
}

Vehicle.cs

public class Vehicle : DomainBase
{
    public virtual string Registration { get; set; }
    public virtual DateTime ServiceStartDate { get; set; }
    public virtual DateTime? ServiceEndDate { get; set; }
    public virtual string Region { get; set; }

    public virtual int VehicleClassId { get; set; }
    public virtual VehicleClass VehicleClass { get; set; }

    public virtual IList<VehicleDefect> VehicleDefects { get; set; }
    public virtual IList<VehicleInspection> VehicleInspections { get; set; }
}

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

    fk 存储在 db 中的 name_id。我必须在 EF 配置中指定这个。误导性错误消息。

    【讨论】:

      猜你喜欢
      • 2013-09-15
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-16
      • 2011-08-27
      • 2018-02-08
      相关资源
      最近更新 更多