如何“;注入“;属性及其对对象的值

本文关键字:对象 注入 属性 如何 | 更新日期: 2023-09-27 18:19:36

目标

将属性及其值"注入"到对象中。

问题

我有以下由实体框架5创建的对象:

public partial class getSpecificProductToShoppingList_Result
{
    public string productName { get; set; }
    public string measureAbbreviation { get; set; }
}

我正在使用Session创建一个购物列表,当用户向列表中添加内容时,应用程序会调用一个过程来获取有关该产品的信息,这些信息将分别填充上述属性。

重点是:用户可以添加他想要的产品数量,这不是数据库的责任。

要添加产品,用户必须访问MyApp.com/Products/Add?productId=1&quantity=5。我可以使用以下内容检索有关产品的所有信息:

ShoppingListController.cs:

public ActionResult Add(Nullable<int> productId, int quantity)
{
    if (Session["ShoppingList"] == null)
    {
        Session["ShoppingList"] = new 
           List<getSpecificProductToShoppingList_Result>();
    }
    getSpecificProductToShoppingList_Result product = 
      Products.BuildItemToShoppingList(productId);
    ((List<getSpecificProductToShoppingList_Result>)Session["ShoppingList"])
      .Add(product);
    return View("Index");
}

然后,视图:

@foreach (var item in 
    (List<MyApp.Models.Data.getSpecificProductToShoppingList_Result>)
    Session["ShoppingList"])
{
    <p>@item.productName | @item.measureAbbreviation</p>
}

我的问题很简单:如何添加类似@item.quantity的内容?

我在想什么

我在想这样的事情(注意产品变量声明后的行):

public ActionResult Add(Nullable<int> productId, int quantity)
{
    if (Session["ShoppingList"] == null)
    {
        Session["ShoppingList"] = 
          new List<getSpecificProductToShoppingList_Result>();
    }
    getSpecificProductToShoppingList_Result product = 
      Products.BuildItemToShoppingList(productId);
    ((List<getSpecificProductToShoppingList_Result>)Session["ShoppingList"])
      .Insert(productId, 
         new KeyValuePair<string, int>("quantity", quantity))
      .Add(product);
    return View("Index");
}

但是——当然——没有成功。语法是错误的,但只是为了说明。

详细信息

我使用的是C#.Net+MVC 4+Razor引擎

如何“;注入“;属性及其对对象的值

在与实体框架模型相同的命名空间中,即在你放置.edmx文件的同一文件夹中,创建一个与实体框架中定义的类同名的新类,我认为在你的情况下是getSpecificProductToShoppingList_Result

将类标记为分部,然后可以向其添加自己的属性。

例如:你的.edmx设计器文件中有这个:

    [EdmEntityTypeAttribute(NamespaceName="YourModel", Name="getSpecificProductToShoppingList_Result")]
    [Serializable()]
    [DataContractAttribute(IsReference=true)]
    public partial class getSpecificProductToShoppingList_Result : EntityObject
    {
...
    }

这是自动生成的,你不能更改它来添加一些属性,但它被标记为部分,以便你对其进行扩展,例如,如果我添加:

public partial class getSpecificProductToShoppingList_Result
{
    public int Quantity {get; set; }
}

C#将它们连接在一起,所以在我的控制器中,我可以进行

var something = new List<getSpecificProductToShoppingList_Result>();

something.First().quantity = 50;

Quantity不属于getSpecificProductToShoppingList_Result,因为这是我的数据库类型,但我通过分部类添加了它。