エンティティフレームワークは、エンティティにインターフェイスを実装しているという事実を無視できますか?状況は、IModelObjectインターフェイスを実装するTagクラスがあり、それを実装するすべてのクラスがIdプロパティを持つ必要があることを定義しています。クラスは以下のとおりです。
public class Tag : IModelObject, IEquatable<Tag>
{
[ScaffoldColumn(false)]
public virtual int Id
{
get;
set;
}
[Required]
public virtual string Name
{
get;
set;
}...
}
そして、私のドメインモデルのすべてのエンティティはIModelObjectを実装しています。基本クラスはなく、インターフェースだけです。デフォルトのマッピングは機能しますが、データベースのDiscriminator列に追加されます。そして、このディスクリミネーターは私のドメインモデルの一部ではないので、データベースには必要ありません。
インターフェイスの実装は継承ではなく、IEquatableインターフェイスも実装しています。では、なぜEntity Frameworkが継承のように動作し、Discriminator列を追加するのでしょうか。また、基本クラスや抽象クラスを使用しないことでこれを回避するにはどうすればよいでしょうか。