Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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# 实体框架代码首先从两个表和一对多的关系中创建类_C#_Entity Framework_Ef Code First_Code First - Fatal编程技术网

C# 实体框架代码首先从两个表和一对多的关系中创建类

C# 实体框架代码首先从两个表和一对多的关系中创建类,c#,entity-framework,ef-code-first,code-first,C#,Entity Framework,Ef Code First,Code First,我创建了一个应用程序,并以订单表为例进行测试。我对班级建模有疑问 我有三门课: public class Car { public int Id { get; set; } public string Name { get; set; } public double Price { get; set; } } public class Part { public int Id { get; set; } public string Name { get;

我创建了一个应用程序,并以订单表为例进行测试。我对班级建模有疑问

我有三门课:

public class Car
{
    public int Id { get; set; }
    public string Name { get; set; }
    public double Price { get; set; }
}
public class Part
{
    public int Id { get; set; }
    public string Name { get; set; }
    public double Price { get; set; }
}


class Order
{
    public Order()
    {
        Cars = new List<Car>();
        Parts = new List<Part>();
    }

    public int OrderId { get; set; }

    public int CarId { get; set; }
    public int PartId { get; set; }

    public ICollection<Car> Cars { get; set; }
    public ICollection<Part> Parts { get; set; }
}
公车
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共双价{get;set;}
}
公共课部分
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共双价{get;set;}
}
阶级秩序
{
公共秩序()
{
Cars=新列表();
零件=新列表();
}
公共int-OrderId{get;set;}
public int CarId{get;set;}
公共int PartId{get;set;}
公共i收集车{get;set;}
公共ICollection部分{get;set;}
}
我不知道这个型号是否合适。你怎么认为?因为应用程序中的某些内容不在此处:/

  • 我无法向数据库中没有的订单添加汽车或零件

  • 在订单表中,我只想看到订单Id、订单价值、汽车Id和购买零件的Id


我希望汽车和零件表没有关于订单的数据。我只想在应用程序中添加零件或汽车,以后只能在订单部分进行选择。

让我们从您需要的物理表开始:

Part { Id, Name, Price }
Car { Id, Name, Price } 
Order { Id }

OrderPart* { OrderId, PartId }
OrderCar* { OrderId, CarId }
最后两个表被称为“联接表”,因为您需要它们能够以相同的顺序存储多个零件和多辆汽车,但实际上它们不是您认为是模型一部分的表

如果您按照以下方式设置类,Entity Framework将自动生成这些联接表:

public class Car
{
    public int Id { get; set; }
    public string Name { get; set; }
    public double Price { get; set; }

    public virtual ICollection<Order> Orders { get; set; }
}
public class Part
{
    public int Id { get; set; }
    public string Name { get; set; }
    public double Price { get; set; }

    public virtual ICollection<Order> Orders { get; set; }
}

class Order
{
    public Order()
    {
        Cars = new List<Car>();
        Parts = new List<Part>();
    }

    public int OrderId { get; set; }

    public virtual ICollection<Car> Cars { get; set; }
    public virtual ICollection<Part> Parts { get; set; }
}
公车
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共双价{get;set;}
公共虚拟ICollection订单{get;set;}
}
公共课部分
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共双价{get;set;}
公共虚拟ICollection订单{get;set;}
}
阶级秩序
{
公共秩序()
{
Cars=新列表();
零件=新列表();
}
公共int-OrderId{get;set;}
公共虚拟ICollection Cars{get;set;}
公共虚拟ICollection部分{get;set;}
}
请注意,Car和Part表上的ICollection属性将是EF创建联接表所需的线索。另外,请记住,您的导航属性上需要“虚拟”属性。

这是一个好的模型吗

  • 一个比萨饼可能有一些缺点
  • 一个比萨饼的奶酪下面可能有一种沙司
  • 一道菜可能有一些味道和一些酱汁
这是我的课程:

    public class Suace
{
    public int Id { get; set; }
    public string Name { get; set; }
    public double Price { get; set; }

    public virtual ICollection<Order> Orders { get; set; }
}

public class Pizza
{
    public int Id { get; set; }
    public string Name { get; set; }
    public double Price { get; set; }
    public ICollection<Idgredient> Idgredients { get; set; }
    public Sauce Sauce {get;set;}

    public virtual ICollection<Order> Orders { get; set; }
}

class Order
{
    public Order()
    {
        Cars = new List<Car>();
        Parts = new List<Part>();
    }

    public int OrderId { get; set; }

    public virtual ICollection<Car> Suace  { get; set; }
    public virtual ICollection<Part> Pizza { get; set; }
}

public class Idgredient
{
    public int Id { get; set; }
    public string Name { get; set; }


    public virtual ICollection<Pizza> Pizzas { get; set; }
}
公共类Suace
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共双价{get;set;}
公共虚拟ICollection订单{get;set;}
}
公共级比萨饼
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共双价{get;set;}
公共ICollection Idgredients{get;set;}
公共酱汁{get;set;}
公共虚拟ICollection订单{get;set;}
}
阶级秩序
{
公共秩序()
{
Cars=新列表();
零件=新列表();
}
公共int-OrderId{get;set;}
公共虚拟ICollection Suace{get;set;}
公共虚拟ICollection{get;set;}
}
公共类Idgredient
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共虚拟ICollection Pizzas{get;set;}
}

一份订单只能包含一辆汽车和一个零件,还是可以包含同一订单中的多辆汽车和零件?目前,您的订单类向EF提供了相互冲突的信息。@LorenPaulsen订单可能没有多少汽车和零件。