3

私のアプリケーションには製品とベンダーがあり、どちらも「持っている」関係にある同様のアイテムを持っています...特に、ユーザーがそれらをブックマークできるように「お気に入り」を持っています。

だから私たちは持っています:

public class Product
{
    public int ProductId {get;set;}
    public int Name {get;set;}
    public List<Favorite> Favorites {get;set;}
}

public class Vendor
{
    public int VendorId {get;set;}
    public int Name {get;set;}
    public List<Favorite> Favorites {get;set;}
}

public class Favorite
{
    public int FavoriteId {get;set;}
    public string UserName {get;set;}
}

最初はこれが機能しなかったので、次のように追加しました。

    public int? VendorId {get;set;}
    public int? ProductId {get;set;}

今私が抱えている問題は、Vendor.FavoritesとProduct.Favoritesが常にnullであるということです。

このようなオブジェクトを操作できるように、これらをバインドするにはどうすればよいですか?別のエンティティにしませんか?

ありがとう!

更新:私はMVC3コードファーストをPOCOで使用していることに注意する必要があります。

更新:解決策:

これは理想的ではないと思いますが、お気に入りやレビューを追加するための冗長なコードが追加されるため、これをどのように機能させたいかという問題を解決しています。

public class Product
{
    public int ProductId {get;set;}
    public int Name {get;set;}
    public virtual List<Favorite> Favorites {get;set;}
}

public class Vendor
{
    public int VendorId {get;set;}
    public int Name {get;set;}
    public virtual List<Favorite> Favorites {get;set;}
}

生のnull許容int変数をfavoritesクラスに含めると機能しますが、favoritesクラスを他のオブジェクトで使用する場合は、オブジェクトのキーへの新しいマッピングでfavoritesプロパティを変更する必要があります。好奇心から、これらのクラスを通常処理する場合、これらのオブジェクトのデータストレージをどのように管理しますか?あなたがDALでそれを扱っていると思いますか?

4

3 に答える 3

1

継承を使用して、Favoriteのみを含む基本クラスを作成し、それを基に他の情報のクラスを派生させることができます。これにより、「isa」関係が確立されます

元。

public class baseClass
{
 public list<Favorite> Favorites { get; set;}
}
public class Product : base
{
 public int ProductID { get; set; }
 public string Name { get; set; }
}

その場合、製品オブジェクトには3つのプロパティすべてが含まれます。

于 2012-08-01T19:17:52.357 に答える
0

EF 4.1を使用しているという仮定に基づいて:

私が変更することを除いて、あなたのモデルはかなりよく見えます

    public int? VendorId {get;set;}
    public int? ProductId {get;set;}

    public virtual Vendor VendorId {get;set;}
    public virtual Product ProductId {get;set;}

次に、FK関係がすべて設定されている必要があります。EFについての私の理解でList<Favorite>は、関係を確立することを意図しており、実際には入力されていません。コンテキストを呼び出すか、.Include()EFがデータベースに作成する実際のFKを参照することにより、自分でデータを入力する必要がありVendorId_FavoriteIdます。ProductId_FavoriteId

于 2012-08-01T19:48:17.790 に答える
0

ID(VendorIDまたはProductId)を格納するために1つのプロパティを保持し、別のプロパティを使用してそれがどのタイプであるかを教えてくれます(VendorまたはProduct

public class Favorite
{
    public int FavoriteId {get;set;}
    public string UserName {get;set;}
    public int ItemID { set;get;}    //can use a better generic name
    public FavoriteType Type { set;get;}
}

私はEnumタイプのために持っています

public enum FavoriteType
{
    Vendor, 
    Product
}

そして、それらにアクセスする前にサブプロパティを初期化していることを確認してください/それらにメソッドを適用して、null参照例外がスローされないようにしてください!。コンストラクター自体で実行できます

public class Product
{
    public int ProductId {get;set;}
    public int Name {get;set;}
    public List<Favorite> Favorites {get;set;}

  public Product()
  {
      if(Favourites==null)
          Favorites=new List<Favorite>();
  }
}
于 2012-08-01T19:23:44.867 に答える