0

エンティティフレームワークは、エンティティにインターフェイスを実装しているという事実を無視できますか?状況は、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列を追加するのでしょうか。また、基本クラスや抽象クラスを使用しないことでこれを回避するにはどうすればよいでしょうか。

4

1 に答える 1

1

私はあなたの推論に少し混乱しています。継承はあなたの問題とは何の関係もありません。あなたの問題は、エンティティにプロパティが含まれていることです(およびその仮想プロパティ。EFは仮想プロパティで特別なことを行います)。EF は、エンティティのすべてのパブリック プロパティに対して列を作成します。なぜそうすべきではないと思うのか、私にはわかりません。

[NotMapped]EF でプロパティを無視する場合は、プロパティで属性を使用できます。EF はそれを無視します。

于 2012-09-19T22:30:26.497 に答える