EF Core基礎實體類繼承和只讀屬性

.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;
}

這是基類,所有實體都應該從這個類繼承。此屬性也應該是readonly(我正在使用支持屬性 ),因為EF需要處理它們。

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

    public string Description { get; set; }
}

並且OnModelCreating為空。當我運行遷移時,我收到消息:

'實體類型'Project.Database.Models.Category'需要定義主鍵。

熱門答案

這似乎是一個錯誤,因為如果您為Id屬性提供publicinternalprotected (但不是private或none)setter,或者您通過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合法嗎? 是的,了解原因