让实体框架忽略派生类型

Posted

技术标签:

【中文标题】让实体框架忽略派生类型【英文标题】:Have Entity Framework ignore derived types 【发布时间】:2011-06-01 07:30:04 【问题描述】:

在我当前的项目中,我使用的是代码优先方法。

我有一个名为Task 的类型,它是模型的一部分。我也有从Task 派生的BackgroundTask 和从BackgroundTask 派生的UserAccountTask

当我只是尝试创建Task 类型的对象并将其添加到我的任务存储库时,我会在尝试将更改保存到数据库时立即得到DbUpdateException。其内部异常状态:

“列名“UserAccount_UserId”无效。\r\n列名“UserAccount_Lastname”无效。\r\n列名“UserAccount_Firstname”无效。\r\n列名“UserAccount_Fullname”无效。\r\n列名“UserAccount_Password”无效.\r\n无效的列名 'UserAccount_Title'[...]"

UserAccount 是另一种类型,是UserAccountTask 的属性(UserIdLastname 等是UserAccount 的属性)。

我希望我对问题的描述不会太混乱:-/ 我只是希望 EF 忽略 Task 是其他类型的基类这一事实,因为恕我直言,当时这并不重要。

提前致谢,凯文

【问题讨论】:

【参考方案1】:

尝试在派生上下文中使用它:

protected override void OnModelCreating(DbModelBuilder modelBuilder)

    base.OnModelCreating(modelBuilder);
    modelBuilder.Ignore<UserAccountTask>();
    modelBuilder.Ignore<BackgroundTask>();

【讨论】:

以上是关于让实体框架忽略派生类型的主要内容,如果未能解决你的问题,请参考以下文章

实体框架:如何从 L2E 返回基本类型

MySql + 实体框架 = 每个派生表都必须有自己的别名

抽象类中的纯虚函数,返回类型为基/派生类型

拥有所有实体派生自的 BaseEntity 类型或接口会更好吗?

关于基类和派生类之间的关系

从表中选择所有类型的实体,但仅限于派生实体的成员