我在使用MySQL的網站上使用EF CF方法。出於某種原因,EF在我的Post表中創建一個名為“Discriminator”的列,並包含VARCHAR“Post”。
為什麼要創建此列?我可以做些什麼來避免它被創建嗎?有這個專欄有什麼好處嗎?
Discriminator
列在Table-Per-Hierarchy繼承方案中使用和需要。例如,如果您有這樣的模型......
public abstract class BaseEntity
{
public int Id { get; set; }
//...
}
public class Post : BaseEntity
{
//...
}
public class OtherEntity : BaseEntity
{
//...
}
...並使BaseEntity
成為模型的一部分,例如通過向派生上下文添加DbSet<BaseEntity>
,Entity Framework將默認將此類層次結構映射到單個表中,但引入一個特殊列 - Discriminator
- to區分存儲在此表中的不同類型( Post
或OtherEntity
)。此列將填充類型的名稱(再次Post
或OtherEntity
)。
您可以通過將[NotMapped]
數據註釋添加到從基類繼承的模型來停止正在創建的列。這將告訴EF不要將您的類添加到將來的遷移中,刪除了鑑別器列。
public class BaseClass
{
}
[NotMapped]
public class InheritingClass : BaseClass
{
}