Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架6跨类映射复合键_C#_Entity Framework_Entity Framework 6 - Fatal编程技术网

C# 实体框架6跨类映射复合键

C# 实体框架6跨类映射复合键,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我有以下课程 public partial class DriverType : Entity<int> { [Column("Id")] [JsonProperty(PropertyName = "drivertypeid")] public override int ID { get; set; } [JsonProperty(PropertyName = "drivertype")] public string Name { get;

我有以下课程

public partial class DriverType : Entity<int>
{
    [Column("Id")]
    [JsonProperty(PropertyName = "drivertypeid")]
    public override int ID { get; set; }

    [JsonProperty(PropertyName = "drivertype")]
    public string Name { get; set; }
}


public partial class Driver : AuditableEntity<int>
    {
        [Key,Column("driverId", Order=0)]
        [JsonProperty(PropertyName="driverid")]
        public override int ID { get; set; }

        [Key,Column("type", Order=1)]
        [ForeignKey("DriverType")]
        [JsonProperty(PropertyName="drivertypeid")]
        public int DriverTypeId { get; set; }
        public virtual DriverType DriverType { get; set; }

        ..... reduced for brevity

    }

public partial class DriversToVehicle
    {
        [Column("id"), Key]
        public int ID { get; set; }

    [Column("driverId", Order = 0), ForeignKey("Driver")]
    public int DriverID { get; set; }
    public virtual Driver Driver { get; set; }

    [Column("type", Order = 1), ForeignKey("Driver")]
    public int DriverTypeId { get; set; }
    [ForeignKey("DriverTypeId")]
    public virtual DriverType DriverType { get; set; }

    [Column("vehicleid")]
    public int VehicleID { get; set; }
    [ForeignKey("VehicleID")]
    public virtual Vehicle Vehicle { get; set; }
}

正如您所看到的,它试图重新创建同名的重复列?我想这是因为外键在这里设置的缘故?

也许您遗漏了太多代码。
车辆
等级在哪里?你打算做什么改变?
Vehicle\u ID
(标记下划线)是EF在数据库中为您创建的外键,但未在您的车型中指定。因此,您可能需要了解
车辆
驾驶员
之间的关系。也许最好重新思考您的问题,并将其减少到最少的代码来重现问题。很可能你会自己解决它。@Dabblernl是的,你是对的,Vehicle类中还有一个错误的公共虚拟列表{get;set;}。删除此选项解决了问题。好的,我明白了,接下来,我将如何添加包含复合键的对象列表?这只能通过链接类/表实现吗?可以这样做,但需要在子对象中创建两个外键并对其进行适当配置,请始终仔细查找数据库中带下划线的外键列。它们是一个指针,表明EF对配置的解释与您的预期不同。
 public partial class Appointment : AuditableEntity<int>
    {
        [Column("AppointmentId")]
        [JsonProperty(PropertyName = "appointmentid")]
        public override int ID { get; set; }
        public DateTime Date { get; set; }

    [Column("driverId", Order=0),ForeignKey("Driver")]
    [JsonProperty(PropertyName = "driverid")]
    public int? DriverID { get; set; }

    [Column("type", Order = 1), ForeignKey("Driver")]
    public int? DriverTypeId { get; set; }
    [ForeignKey("DriverTypeId")]
    public virtual DriverType DriverType { get; set; }

    public virtual Driver Driver { get; set; }
  DropForeignKey("dbo.Appointment", "DriverID", "dbo.Driver");
                DropForeignKey("dbo.InsurancePolicyDrivers", "Driver_ID", "dbo.Driver");
                DropForeignKey("dbo.Driver", "Vehicle_ID", "dbo.Vehicles");
                DropForeignKey("dbo.DriversToVehicles", "driverid", "dbo.Driver");
                DropIndex("dbo.Appointment", new[] { "DriverID" });
                DropIndex("dbo.Driver", new[] { "Vehicle_ID" });
                DropIndex("dbo.DriversToVehicles", new[] { "driverid" });
                DropIndex("dbo.InsurancePolicyDrivers", new[] { "Driver_ID" });
                DropColumn("dbo.Driver", "driverId");
                DropColumn("dbo.Driver", "driverId");
                RenameColumn(table: "dbo.Driver", name: "id", newName: "driverId");
                RenameColumn(table: "dbo.Driver", name: "Vehicle_ID", newName: "driverId");
                DropPrimaryKey("dbo.Driver");
                DropPrimaryKey("dbo.InsurancePolicyDrivers");
                CreateTable(
                    "dbo.DriverTypes",
                    c => new
                        {
                            Id = c.Int(nullable: false, identity: true),
                            Name = c.String(),
                            IsArchived = c.Boolean(),
                        })
                    .PrimaryKey(t => t.Id);

                AddColumn("dbo.Appointment", "type", c => c.Int());
                AddColumn("dbo.DriversToVehicles", "type", c => c.Int(nullable: false));
                AddColumn("dbo.InsurancePolicyDrivers", "Driver_DriverTypeId", c => c.Int(nullable: false));
                AlterColumn("dbo.Driver", "driverId", c => c.Int(nullable: false));
                AlterColumn("dbo.Driver", "driverId", c => c.Int(nullable: false));
                AddPrimaryKey("dbo.Driver", new[] { "driverId", "type" });
                AddPrimaryKey("dbo.InsurancePolicyDrivers", new[] { "InsurancePolicy_ID", "Driver_ID", "Driver_DriverTypeId" });
                CreateIndex("dbo.Appointment", new[] { "driverId", "type" });
                CreateIndex("dbo.Driver", "driverId");
                CreateIndex("dbo.Driver", "type");
                CreateIndex("dbo.DriversToVehicles", new[] { "driverId", "type" });
                CreateIndex("dbo.InsurancePolicyDrivers", new[] { "Driver_ID", "Driver_DriverTypeId" });
                AddForeignKey("dbo.Driver", "type", "dbo.DriverTypes", "Id", cascadeDelete: true);
                AddForeignKey("dbo.Appointment", "type", "dbo.DriverTypes", "Id");
                AddForeignKey("dbo.DriversToVehicles", "type", "dbo.DriverTypes", "Id", cascadeDelete: true);
                AddForeignKey("dbo.Appointment", new[] { "driverId", "type" }, "dbo.Driver", new[] { "driverId", "type" });
                AddForeignKey("dbo.InsurancePolicyDrivers", new[] { "Driver_ID", "Driver_DriverTypeId" }, "dbo.Driver", new[] { "driverId", "type" });
                AddForeignKey("dbo.Driver", "driverId", "dbo.Vehicles", "id", cascadeDelete: true);
                AddForeignKey("dbo.DriversToVehicles", new[] { "driverId", "type" }, "dbo.Driver", new[] { "driverId", "type" }, cascadeDelete: true);