1

多くのエンティティにローカライズが必要なコンテンツがあるドメイン モデルがあります。たとえば、名前と説明に多言語サポートが必要な Product エンティティがあるとします。同じことが他の多くのエンティティにも当てはまります。

今、これは私が実装したいデザインです:

class LocalizedContent {
     public Guid Id {get; set; }
     public virtual ICollection<LocalizedContentEntry> Values {get; set;} 
}

class LocalizedContentEntry {
     public int Id {get; set; }
     public Guid ContentId {get; set; }
     public string Locale {get; set; }
     public string Value {get; set; } 
}

class Product {
     public int Id {get; set; }
     public LocalizedContent Name {get; set; }
     public LocalizedContent Description {get; set; } 
}

class OtherEntity {
     public int Id {get; set; }
     public LocalizedContent SomeColumn {get; set; }
}

私が気に入らない点の 1 つは、LocalizedContent のテーブルに 1 つの列 (Id) しかないことです。その目的は、LocalizedContentEntity と他のテーブルの間のブリッジとして機能することです。Db の観点から言えば、私が本当に必要としているのは LocalizedContentEntity テーブルだけです。1 列のテーブルを作成せずにこれらのエンティティをマップする方法はありますか?

4

1 に答える 1

1

LocalizedContentを作ってみてくださいComplexType:

[ComplexType]
public class LocalizedContent {
   public Guid Id { get; set; }
   public virtual ICollection<LocalizedContentEntry> Values { get; set;} 
}

これにより、次の表が作成されます (SQL CE に基づく)。

CREATE TABLE "LocalizedContentEntries" (
   "Id" int not null identity,
   "ContentId" uniqueidentifier not null,
   "Locale" nvarchar(4000) null,
   "Value" nvarchar(4000) null,
   PRIMARY KEY ("Id")
);
CREATE TABLE "Products" (
   "Id" int not null identity,
   "Name_Id" uniqueidentifier not null,
   "Description_Id" uniqueidentifier not null,
   PRIMARY KEY ("Id")
);
CREATE TABLE "OtherEntities" (
   "Id" int not null identity,
   "SomeColumn_Id" uniqueidentifier not null,
   PRIMARY KEY ("Id")
);

http://blogs.msdn.com/b/adonet/archive/2009/05/28/poco-in-the-entity-framework-part-2-complex-types-deferred-loading-and-explicit-loading. aspx

于 2012-12-05T19:28:30.877 に答える