实体框架代码首先从两个表创建类,并从一对多创建关系

问题描述 投票:1回答:2

我创建了一个应用程序,作为测试的一个例子,我拿了一张订单表。我对课程建模有疑问。

我有3个班:

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; }
}

我不知道这个型号是否合适。你怎么看?因为有些东西不在这里:/在应用程序中:

  • 我无法将汽车或零件添加到我在数据库中没有的订单中。
  • 在订单表中,我只想看到订单ID,订单价值,汽车的Id和购买的零件的Id。

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

c# entity-framework ef-code-first code-first
2个回答
0
投票

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

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; }
}

请注意,Car和Part表上的ICollection <>属性将是制作连接表所需的EF的线索。此外,请记住您的导航属性需要“虚拟”。


0
投票

这是好模特吗?

  • 一个披萨可能有一些耻辱
  • 一个披萨可以在奶酪下面加一酱
  • 一个订单可能有一些idgredience和一些调味品。

这是我的课程:

    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; }
}
© www.soinside.com 2019 - 2024. All rights reserved.