EFコアベースエンティティクラスの継承と読み取り専用のプロパティ

.net-core asp.net-core c# entity-framework entity-framework-core

質問

次のようなことが可能ですか?

public abstract class BaseEntity : IEntity
{
    private Guid _id;
    private DateTime _createdOn;
    private DateTime _modifiedOn;
    private byte[] _timestamp;

    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id => _id;

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public DateTime CreatedOn => _createdOn;

    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public DateTime ModifiedOn => _modifiedOn;

    [Timestamp]
    public byte[] Timestamp => _timestamp;
}

これは基本クラスであり、すべてのエンティティはこのクラスから継承する必要があります。また、このプロパティは読み込み専用でなければなりません(私はバッキングプロパティを使用しています )。なぜなら、EFはそれらを処理する必要があるからです。

public class Category : BaseEntity
{
    [Required]
    public string Name { get; set; }

    public string Description { get; set; }
}

OnModelCreatingは空です。移行を実行すると、メッセージが表示されます。

'エンティティタイプ' Project.Database.Models.Category 'には、主キーを定義する必要があります。

人気のある回答

Idプロパティのpublicinternalまたはprotectedprivateはない、またはnoneの)セッターを提供する場合、またはFluent APIを使用して派生したエンティティのキ​​ーを明示的に指定した場合、これはバグのようです

modelBuilder.Entity<Category>().HasKey(e => e.Id);

もちろん基本クラスのプロパティを使用する目的はすべて無効になります。

それをEF Core GitHubに報告することを検討するかもしれません。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ