我正在使用 EF 4.3,并且我一直在对我的实体进行一些小的更改,但没有一个实体类是此错误的一部分。我想了解为什么突然开始呕吐。
我的课程:
public class Apple: Fruit
{
public Color Color{ get; set; }
}
public class Fruit: EntityBase
{
public int Size{ get; set; }
public DateTime? DateGrown{ get; set; }
public User GrownBy{ get; set; }
public User SoldBy{ get; set; }
}
public class EntityBase
{
public int Id{ get; set;}
}
现在抛出"Invalid column name 'Discriminator'"的行:
repository.Apples.Include("GrownBy").Include("SoldBy")
.Where(r => r.GrownBy.Id == user.Id
|| r.SoldBy.Id == user.Id).ToList();
如果我复制 repository.Apples 尝试运行的 SQL,并在 SSMS 中运行它,它运行得很好:
SELECT
[Extent1].[Id] AS [Id],
'0X0X' AS [C1],
[Extent1].[DateGrown] AS [DateGrown],
[Extent1].[Color] AS [Color],
[Extent1].[DateGrown] AS [DateGrown],
[Extent1].[GrownBy_Id] AS [GrownBy_Id],
[Extent1].[SoldBy_Id] AS [SoldBy_Id],
[Extent1].[Size] AS [Size],
FROM [dbo].[Fruits] AS [Extent1]
WHERE [Extent1].[Discriminator] = N'Apple'
我尝试将 [NotMapped] Data Annotation 添加为推荐的 @ EF Code First "Invalid column name 'Discriminator'" 但没有继承,例如:
[NotMapped]
public class Apple: Fruit
{
public Color Color{ get; set; }
}
但它会产生一个新错误:
未映射类型“Domain.Entities.Apple”。使用 Ignore 方法或 NotMappedAttribute 数据注释检查该类型是否被显式排除。验证该类型是否被定义为一个类,不是原始的、嵌套的或泛型的,并且不是从 EntityObject 继承的。
在以下行:
_context.Database.Initialize(true);
真的开始后悔使用 EF,因为它似乎每周都会出现这样的新问题。如果有人可以提供有关修复的任何见解,将不胜感激。
编辑: 所以看起来它与 Fruit 或 Apple 实体完全无关。我添加了用户实体的继承类,这就是导致事情中断的原因。