1

目标

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

问题

我有以下由 Entity Framework 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 引擎

4

1 回答 1

2

在与您的实体框架模型相同的命名空间中,即。您放置 .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 因为那是我的数据库类型,但我已通过部分类添加它。

于 2013-06-21T15:30:20.267 回答