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# EF:多列外键_C#_Entity Framework_Foreign Keys_Foreign Key Relationship - Fatal编程技术网

C# EF:多列外键

C# EF:多列外键,c#,entity-framework,foreign-keys,foreign-key-relationship,C#,Entity Framework,Foreign Keys,Foreign Key Relationship,我有4个实体需要存储有关多仓库订单的详细信息 订单-订单的标题 仓库-仓库的详细信息 public class Order { public int Id { get; set; } public virtual ICollection<OrderWarehouse> OrderWarehouses { get; set; } public virtual ICollection<OrderLine> OrderLines { get; set

我有4个实体需要存储有关多仓库订单的详细信息

订单-订单的标题

仓库-仓库的详细信息

public class Order
{
    public int Id { get; set; }

    public virtual ICollection<OrderWarehouse> OrderWarehouses { get; set; }

    public virtual ICollection<OrderLine> OrderLines { get; set; }
}

public class Warehouse
{
    public int Id { get; set; }

    public virtual ICollection<OrderWarehouse> OrderWarehouses { get; set; }

    public virtual ICollection<OrderLine> OrderLines { get; set; }
}

public class OrderLine
{
    public int Id { get; set; }

    public int OrderId { get; set; }

    public int ProductId { get; set; }

    public int WarehouseId { get; set; }

    [ForeignKey("OrderId")]
    public virtual Order Order { get; set; }

    [ForeignKey("WarehouseId")]
    public virtual Warehouse Warehouse { get; set; }

    public virtual OrderWarehouse OrderWarehouse { get; set; } // THIS IS WHERE I AM STRUGGLING
}

public class OrderWarehouse
{
    [Key, Column(Order = 0)]
    public int OrderId { get; set; }

    [Key, Column(Order = 1)]
    public int WarehouseId { get; set; }

    [ForeignKey("OrderId")]
    public virtual Order Order { get; set; }

    [ForeignKey("WarehouseId")]
    public virtual Warehouse Warehouse { get; set; }

    public virtual ICollection<OrderLine> OrderLines { get; set; } // THIS IS WHERE I AM STRUGGLING
}
OrderLines-订单中产品的详细信息(包括其所属的仓库)

OrderWarehouse-有关订单的详细信息,仅与单个仓库相关

public class Order
{
    public int Id { get; set; }

    public virtual ICollection<OrderWarehouse> OrderWarehouses { get; set; }

    public virtual ICollection<OrderLine> OrderLines { get; set; }
}

public class Warehouse
{
    public int Id { get; set; }

    public virtual ICollection<OrderWarehouse> OrderWarehouses { get; set; }

    public virtual ICollection<OrderLine> OrderLines { get; set; }
}

public class OrderLine
{
    public int Id { get; set; }

    public int OrderId { get; set; }

    public int ProductId { get; set; }

    public int WarehouseId { get; set; }

    [ForeignKey("OrderId")]
    public virtual Order Order { get; set; }

    [ForeignKey("WarehouseId")]
    public virtual Warehouse Warehouse { get; set; }

    public virtual OrderWarehouse OrderWarehouse { get; set; } // THIS IS WHERE I AM STRUGGLING
}

public class OrderWarehouse
{
    [Key, Column(Order = 0)]
    public int OrderId { get; set; }

    [Key, Column(Order = 1)]
    public int WarehouseId { get; set; }

    [ForeignKey("OrderId")]
    public virtual Order Order { get; set; }

    [ForeignKey("WarehouseId")]
    public virtual Warehouse Warehouse { get; set; }

    public virtual ICollection<OrderLine> OrderLines { get; set; } // THIS IS WHERE I AM STRUGGLING
}
公共类秩序
{
公共int Id{get;set;}
公共虚拟ICollection命令仓库{get;set;}
公共虚拟ICollection命令行{get;set;}
}
公共类仓库
{
公共int Id{get;set;}
公共虚拟ICollection命令仓库{get;set;}
公共虚拟ICollection命令行{get;set;}
}
公共类命令行
{
公共int Id{get;set;}
公共int-OrderId{get;set;}
public int ProductId{get;set;}
public int WarehouseId{get;set;}
[外键(“订单ID”)]
公共虚拟订单{get;set;}
[外键(“仓库ID”)]
公共虚拟仓库{get;set;}
公共虚拟OrderWarehouse OrderWarehouse{get;set;}//这就是我正在努力的地方
}
公共类订单仓库
{
[键,列(顺序=0)]
公共int-OrderId{get;set;}
[键,列(顺序=1)]
public int WarehouseId{get;set;}
[外键(“订单ID”)]
公共虚拟订单{get;set;}
[外键(“仓库ID”)]
公共虚拟仓库{get;set;}
公共虚拟ICollection命令行{get;set;}//这就是我正在努力的地方
}
我似乎无法正确定义订单行和OrderWarehouse之间的关系

密钥由OrderId、WarehouseId组成

我知道这需要在上下文中定义,但我的所有尝试都会出错

有人能帮我吗

编辑:

如果我尝试这样做:

modelBuilder.Entity<OrderLine>()
.HasOptional(u => u.OrderWarehouse)
.WithMany()
.HasForeignKey(u => new { u.OrderId, u.WarehouseId });
modelBuilder.Entity()
.has可选(u=>u.OrderWarehouse)
.有很多
.HasForeignKey(u=>new{u.OrderId,u.WarehouseId});
我得到:

OrderLine\u OrderWarehouse::多重性与 中角色“OrderLine\u OrderWarehouse\u Target”中的引用约束 关系“OrderLine\u OrderWarehouse”。因为所有的属性 在从属角色中,主体的多重性是不可为空的 角色必须为“1”


您拥有的fluent映射几乎是正确的,但是您不能在不可为null的属性上指定可选关系,如果您尝试以下操作,它应该可以工作

modelBuilder.Entity<OrderLine>()
.HasRequired(u => u.OrderWarehouse)
.WithMany()
.HasForeignKey(u => new { u.OrderId, u.WarehouseId });
modelBuilder.Entity()
.HasRequired(u=>u.OrderWarehouse)
.有很多
.HasForeignKey(u=>new{u.OrderId,u.WarehouseId});