既存の Ruby on Rails アプリケーションの一部を .NET MVC 4 および Entity Framework 5 に移植する作業を行っています (聞かないでください)。ORM 機能、特に Rails のポリモーフィック アソシエーションを複製するのに助けが必要です。
既存のデータベース構造を変更したくありません。私が行っていることの例を 1 つ挙げます。データベースは次のようになります。
CREATE TABLE tags (
id integer PRIMARY KEY,
name nvarchar(128) NOT NULL,
UNIQUE (name)
);
CREATE TABLE taggings (
id integer PRIMARY KEY,
tag_id integer REFERENCES tags(id) ON DELETE CASCADE,
taggable_id integer,
taggable_type nvarchar(255),
);
CREATE TABLE stories (
id integer PRIMARY KEY,
name nvarchar(128) NOT NULL
[more stuff]
);
CREATE TABLE assets (
id integer PRIMARY KEY,
name nvarchar(128) NOT NULL
[more stuff]
);
タグ付けモデルは、ストーリー、アセットなど、他のいくつかに関連付けられています。このテーブルのレコードは次のようになります。
INSERT INTO taggings values (1, 1, 1234, 'Story');
INSERT INTO taggings values (2, 343, 69, 'Asset');
INSERT INTO taggings values (3, 200, 42, 'Asset');
したがって、ドメイン内のアセット モデルとストーリー モデルの両方が、タグ付けと 1 対多の関係にあります。C# の Story クラスと Asset クラスでこの関係をモデル化 (Fluent API) したいと考えています。
関係を定義するときに、おそらく追加の条件 (Tagging.taggable_type = 'Story') を使用して、これを指定する方法はありますか? 他の方向 (タグ付けからストーリー/アセットへ) に移動する必要はありません。