0

エンティティの基本クラスを実装したいので、各エンティティでGUIDIDフィールドを定義する必要はありません。次の基本クラスを作成しました。

public abstract class IdableEntity
    {
        [Key]
        public Guid Id { get; set; }

        protected IdableEntity()
        {
            Id = Guid.NewGuid();
        }
    }

これは、私が知っている限り、この場合は[DatabaseGenerated ...]属性を使用できるためです。これは、データベースに移動し、すべてのテーブルのIDフィールドを変更して(newid())を呼び出す必要があるためです。 「初期化子」。多くのエンティティクラス、つまり多くのテーブルがある場合、これは非常に不便です。

しかし、今度は、各子クラスの基本コンストラクターを呼び出してコンストラクターを定義解除する必要がありますよね?もしそうなら、それも価値がありますか?

4

2 に答える 2

2

コードをそのまま使用する場合、必要なことは次のとおりです。

public class ChildEntity : IdableEntity
{
    // ...
}

ChildEntity クラスのインスタンスを作成すると、保護された基本の IdableEntity コンストラクターがパラメーターを取らないため、自動的に呼び出されます。

于 2012-08-02T23:54:56.613 に答える
0

問題に対する別の解決策は、コードを使用してすべてのテーブルを自動的に調べ、デフォルトの制約を設定することです。他の誰かがここでそれを行う方法をすでに回答しています: SQL Server - すべてのテーブルにデフォルトの制約を追加します

于 2012-08-03T00:54:56.987 に答える