1

目標

プロパティとその値をオブジェクトに「注入」します。

問題

Entity Framework 5 によって作成された次のオブジェクトがあります。

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

セッションを使用して買い物リストを作成しています。ユーザーが自分のリストに何かを追加すると、アプリケーションはこの製品に関する情報を取得するプロシージャを呼び出し、これらの情報はそれぞれ上記のプロパティに入力されます。

ポイントは、ユーザーは必要な量の製品を追加できるということです。これはデータベースの責任ではありません。

製品を追加するには、ユーザーは にアクセスする必要があります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 に答える