Asp.net 网上商店-使用多个产品MVC.net创建订单
因此,我正在使用代码优先的MVC构建一个在线商店 所以我现在创建了这个模型类(现在不要把属性的类型看得太重): 产品(Produto): 所以我的问题是。。 让我们假设一位顾客购买了2、3种或更多的产品。 如何在一个订单的单行中存储所有这些产品?Asp.net 网上商店-使用多个产品MVC.net创建订单,asp.net,asp.net-mvc,model-view-controller,ef-code-first,code-first,Asp.net,Asp.net Mvc,Model View Controller,Ef Code First,Code First,因此,我正在使用代码优先的MVC构建一个在线商店 所以我现在创建了这个模型类(现在不要把属性的类型看得太重): 产品(Produto): 所以我的问题是。。 让我们假设一位顾客购买了2、3种或更多的产品。 如何在一个订单的单行中存储所有这些产品? 干杯并提前感谢您花时间阅读。我不知道您所说的“订单的一行”是什么意思。每个产品都是一个单独的行项目,您的实体已经通过多对多关系对此进行了建模 然而,一般来说,这种设置是一个非常糟糕的主意。您的订单不应与产品直接相关。相反,您的订单应该只包含一个订单项,
干杯并提前感谢您花时间阅读。我不知道您所说的“订单的一行”是什么意思。每个产品都是一个单独的行项目,您的实体已经通过多对多关系对此进行了建模
然而,一般来说,这种设置是一个非常糟糕的主意。您的订单不应与产品直接相关。相反,您的订单应该只包含一个订单项,并且您将根据销售的产品创建这些订单项。原因是产品很可能会发生变化。例如,如果某个产品因不再可用而被删除,这并不否认它以前是在订单中销售的。然而,为了保持参考完整性,任何与该产品一起销售的订单也必须删除它们与该产品的关系。通过拥有一个完全独立的实体,即订单项,产品可以来来去去,而已经创建的订单不会受到影响。我不确定您所说的“订单的一行”是什么意思。每个产品都是一个单独的行项目,您的实体已经通过多对多关系对此进行了建模
然而,一般来说,这种设置是一个非常糟糕的主意。您的订单不应与产品直接相关。相反,您的订单应该只包含一个订单项,并且您将根据销售的产品创建这些订单项。原因是产品很可能会发生变化。例如,如果某个产品因不再可用而被删除,这并不否认它以前是在订单中销售的。然而,为了保持参考完整性,任何与该产品一起销售的订单也必须删除它们与该产品的关系。通过拥有一个完全独立的实体,即订单项,产品可以来来去去去,而已经创建的订单不会受到影响。我猜您正在寻找一个viewmodel 创建一个包含产品的类,并将类作为属性进行编码- 模型-
public class MyViewModel
{
public Produto Pinst{get;set;}
public Encomenda Einst{get;set;}
}
控制器或方法-
public void SomeMethod()
{
List<MyViewModel> lst = new List<MyViewModel>();
//Now suppose
foreach(var items in listThatGetCreatedWithBuyerproductInfo)
{
MyViewModel obj = new MyViewModel ();
obj.Pinst = new Produto();
obj.Einst = new Encomenda();
//Here goes your properties from item in respected class instances
obj.Pinst.Nome = items.Nome;
obj.Einst.DataSubmissao = items.DataSubmissao;
//when you are done loading add obj to list
lst.Add(obj);
}
}
public void SomeMethod()
{
List lst=新列表();
//现在假设
foreach(GetCreatedWithBuyerProductInfo列表中的变量项)
{
MyViewModel obj=新的MyViewModel();
obj.Pinst=新产品();
obj.Einst=new Encomenda();
//下面是受尊重的类实例中的项的属性
obj.Pinst.Nome=项目.Nome;
obj.Einst.DataSubmissao=items.DataSubmissao;
//加载完毕后,将obj添加到列表中
第一次添加(obj);
}
}
如果它不告诉我,希望它能帮助我 我想您是想制作一个viewmodel 创建一个包含产品的类,并将类作为属性进行编码- 模型-
public class MyViewModel
{
public Produto Pinst{get;set;}
public Encomenda Einst{get;set;}
}
控制器或方法-
public void SomeMethod()
{
List<MyViewModel> lst = new List<MyViewModel>();
//Now suppose
foreach(var items in listThatGetCreatedWithBuyerproductInfo)
{
MyViewModel obj = new MyViewModel ();
obj.Pinst = new Produto();
obj.Einst = new Encomenda();
//Here goes your properties from item in respected class instances
obj.Pinst.Nome = items.Nome;
obj.Einst.DataSubmissao = items.DataSubmissao;
//when you are done loading add obj to list
lst.Add(obj);
}
}
public void SomeMethod()
{
List lst=新列表();
//现在假设
foreach(GetCreatedWithBuyerProductInfo列表中的变量项)
{
MyViewModel obj=新的MyViewModel();
obj.Pinst=新产品();
obj.Einst=new Encomenda();
//下面是受尊重的类实例中的项的属性
obj.Pinst.Nome=项目.Nome;
obj.Einst.DataSubmissao=items.DataSubmissao;
//加载完毕后,将obj添加到列表中
第一次添加(obj);
}
}
如果它不告诉我,希望它能帮助我 谢谢你的回复。我理解你所说的,并且100%有道理,尽管我如何才能做到这一点,或者我应该把它与什么联系起来?也许这很简单,但现在还没有敲响警钟,我也不确定如何实现它。这取决于你想要什么。简单地说,我说的只是另一个实体,比如
OrderItem
。在内部,它可能看起来与当前的Produto_Encomenda
非常相似,除了与产品直接相关之外,您只需将相关的产品信息(名称、图像等)放在这里。这种关系将是一对多,而不是多对多。每个OrderItem
将直接与一个订单相关。如果您愿意,您仍然可以将外键返回到产品,但是您需要将此外键设置为NULL,并且应该将其设置为DELETE set NULL。好的,Chris,我会尝试,我会让您知道事情的进展。谢谢你的回复。我理解你所说的,并且100%有道理,尽管我如何才能做到这一点,或者我应该把它与什么联系起来?也许这很简单,但现在还没有敲响警钟,我也不确定如何实现它。这取决于你想要什么。简单地说,我说的只是另一个实体,比如OrderItem
。在内部,它可能看起来与当前的Produto_Encomenda
非常相似,除了与产品直接相关之外,您只需将相关的产品信息(名称、图像等)放在这里。这种关系将是一对多,而不是多对多。每个OrderItem
将直接与一个订单相关。如果您愿意,您仍然可以将外键返回到产品,但是您需要将此外键设置为NULL,并且应该将其设置为DELETE set NULL。好的,Chris,我会尝试,我会让您知道事情的进展。谢谢
public void SomeMethod()
{
List<MyViewModel> lst = new List<MyViewModel>();
//Now suppose
foreach(var items in listThatGetCreatedWithBuyerproductInfo)
{
MyViewModel obj = new MyViewModel ();
obj.Pinst = new Produto();
obj.Einst = new Encomenda();
//Here goes your properties from item in respected class instances
obj.Pinst.Nome = items.Nome;
obj.Einst.DataSubmissao = items.DataSubmissao;
//when you are done loading add obj to list
lst.Add(obj);
}
}