私はMySQLを持つウェブサイトにEF CFアプローチを使用しています。 何らかの理由で、EFは "Discriminator"というPostテーブルに列を作成し、VARCHAR "Post"を含みます。エンティティフレームワークコードが最初に "discriminator"カラムを作成します
なぜこの列が作成されますか?作成を避けるために何かできますか?この列を持つ利点はありますか?
私はMySQLを持つウェブサイトにEF CFアプローチを使用しています。 何らかの理由で、EFは "Discriminator"というPostテーブルに列を作成し、VARCHAR "Post"を含みます。エンティティフレームワークコードが最初に "discriminator"カラムを作成します
なぜこの列が作成されますか?作成を避けるために何かできますか?この列を持つ利点はありますか?
Discriminator
列が使用され、Table-Per-Hierarchy継承シナリオで必要です。例えば、あなたが...
public abstract class BaseEntity
{
public int Id { get; set; }
//...
}
public class Post : BaseEntity
{
//...
}
public class OtherEntity : BaseEntity
{
//...
}
をこのようなモデルを持っている...そして、あなたの派生コンテキストにDbSet<BaseEntity>
を追加することによって、例えば、モデルのBaseEntity
一部を、作る場合は、Entity Frameworkのは、このクラス階層をマップしますこのテーブルに格納されている異なるタイプ(Post
またはOtherEntity
)を区別するために、特別なカラム(Discriminator
)を導入しています。この列には、タイプの名前(再度Post
またはOtherEntity
)が入力されます。
お返事ありがとうございます。しかし、私のモデルは得られていません。なぜEFは弁別器を作っているのですか? – kasperhj
@lejon:あなたの質問にモデルを表示できますか?私は相続の文脈以外では、Discriminator列を見たことがありません。上記の私のコードは例です。 'Post'自体が導出されていない場合でも、' Post'から派生した他のエンティティがある場合は、同じものを取得します。 – Slauma
私は見る!ポストから派生した別のモデル。回答ありがとうございます! – kasperhj