1

唯一の受け入れられた回答は質問に対する回答ではないため、基本的にこの質問を再質問しています。

生成されたエンティティ クラスの基本クラスとして、以下のような EntityObject をサブクラス化するクラスを使用するように EF に指示することは可能ですか?

public abstract class CustomEntityObject : EntityObject
{
    <additional functionality>
}

私が尋ねている理由は、インターフェースを追加して、個別の部分クラス ファイル内のすべてのエンティティ タイプにそれらを実装するのをやめたいからです。EntityObject をサブクラス化することで、追加機能を 1 回だけ実装できました。

アップデート:

EF は暗黙的に .tt ファイルを使用してエンティティ クラスを生成します。暗黙的には、プロジェクトに .tt ファイルが表示されないことを意味します。解決策は、テンプレートを明示的に追加することです (.edmx デザイナーを右クリックし、[コード生成項目の追加...] をクリックしてから、[ADO.NET EntityObject Generator] を追加します)。次に、.tt 内の単一の値を変更します。

string BaseTypeName(EntityType entity, CodeGenerationTools code)
{
    return entity.BaseType == null ? "EntityObject" : MultiSchemaEscape((StructuralType)entity.BaseType, code);
}

変更:

string BaseTypeName(EntityType entity, CodeGenerationTools code)
{
    return entity.BaseType == null ? "CustomEntityObject" : MultiSchemaEscape((StructuralType)entity.BaseType, code);
}
4

2 に答える 2

1

そのようなハックを使用できます (これはhackです)。

エンティティと同じ名前空間にクラス "abstract class EntityObject : System.Data.Objects.DataClasses.EntityObject" を作成します。次に、このクラスを基本クラスとして使用できます。

しかし、複雑で美しいソリューションを作成したい場合は、T4 テンプレート、カスタム生成などを使用してください。ここここ でソリューションを見つけることができます。

于 2012-10-08T13:44:07.583 に答える
0

つまり、デフォルトの T4 テンプレート デザイナーを使用すると、EntityClass から継承されたエンティティ クラスが生成されます。

モデル デザイナーを使用し、カスタム基本クラスを提供できるようにするには、 http://msdn.microsoft.com/en-us/library/ff477605.aspxをダウンロードする必要があります(アイテムを追加する前に、使用方法の説明です)。 > オンライン テンプレートですが、少なくとも私の vs2012 ではもう見つかりません。何らかの理由でなくなっている可能性があります) テンプレートを作成し、テンプレート ファイルを編集して、カスタムの基本クラスを挿入しますが、ほとんどのプログラマーは POCO を参照していると思います。理由があるため、永続性を持たないクラスを作成することをお勧めします。

于 2012-07-23T13:04:13.657 に答える