2

エンティティフレームワークを使用して(MVCを使用しますが、それは無関係だと思います)、拡張可能なエンティティを作成しようとしています。

ユーザーがお気に入りまたはブックマークとしてラベル付けできるクラスがいくつかあります...実際には、この機能を利用するいくつかの異なるオブジェクトがあります。私が現在これを私のモデルに実装している方法は次のようなものです(例として):

public class Favorite
{
   [key]
   public int FavoriteId {get; set;}

   public int? BikeId {get; set;}
   public virtual Bike Bike {get;set;}

   public int? HelmetId {get;set;}
   public virtual Helmet Helmet {get;set;}

   public int? ShoeId {get;set;}
   public virtual Shoe Shoe{get;set;}

   public int UserId {get;set;}
   public virtual User User {get;set;}
}

自転車、ヘルメット、ユーザー、靴のクラスはすべて次のようになります。

public class Bike
{
   public int BikeId {get;set;}
   ...
   public virtual list<Favorties> Favorites {get;set;}
}

したがって、現在、私のテーブルは次のようになっています。

Favorites:
|   Id   |  BikeId  |  HelmetId  | ShoeId   | UserId        |
|   1    |    5     |            |          | snowburnt     |
|   2    |    6     |            |          | jonh          |
|   3    |          |     2      |          | snowburnt     |

お気に入りのテーブルが次のようになるように、複数列の主キーの一部として参照されているオブジェクトの名前を格納する微分列があるお気に入りのオブジェクトの構造を好みます(ユーザーIDがそうではないことを知っていますint):

Favorites:
|   ID    |   Differentiator   |   foreignKeyId    | UserId       |
|    1    |     Bike           |    5              | snowburnt    |
|    2    |     Bike           |    6              | john         |
|    3    |     Helmet         |    2              | snowburnt    |

これを実行する主な理由は、お気に入りに統合したい新しいオブジェクトがある場合に、お気に入りオブジェクトの構造を変更する必要がないようにするためです。

階層は次のようになります。

自転車、ヘルメットなどは0から多くのお気に入りがあります

これはasp.netエンティティフレームワークで可能ですか?これどうやってするの?エンティティフレームワークを深く理解するための良い参考資料はありますか?

注:ここに投稿があります。http://weblogs.asp.net/manavi/archive/2010/12/24/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part -1-table-per-hierarchy-tph.aspxこれはうまく機能します...ここで継承状況が発生した場合(継承状況が発生しない理由のほとんどは、複数のクラスまたはインターフェイスが必要なためです。同じ関係:お気に入り、ブックマーク、コメント、レビューなど)。お気に入りのインターフェースを使用できる/使用すべきである可能性が非常に高いです(自転車、ヘルメットをお気に入りにする)。それがSQLスキーマでどのようにマッピングされるかについてのメモは見つかりませんでした(その場合、お気に入りのテーブルさえありますか?)

4

1 に答える 1

0

記述された構造を持つテーブルが必要な場合は、そのためにADO.NETとSQLを使用する必要があります。EFはそれをマッピングできません。EFは、実際の関係(参照制約)のみをマップできます。テーブルには実際の関係はありません。アプリケーションにとって特別な意味を持つデータだけがあり、EFは現在、階層継承ごとのテーブルのような非常に単純なシナリオを除いて、データ駆動型マッピングをサポートしていません。EFを使用する場合は、現在のテーブル構造を使用する必要があります。

于 2012-09-24T16:28:12.937 に答える