私は 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;}
}
現在「無効な列名 '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] データ注釈を推奨 @ EF Code First として追加しようとしましたが、次のような継承はありません:
[NotMapped]
public class Apple: Fruit
{
public Color Color{ get; set; }
}
しかし、それは新しいエラーを作成します:
タイプ「Domain.Entities.Apple」はマップされませんでした。Ignore メソッドまたは NotMappedAttribute データ注釈を使用して、型が明示的に除外されていないことを確認してください。型がクラスとして定義されていること、プリミティブ、ネスト、またはジェネリックではないこと、および EntityObject から継承されていないことを確認してください。
次の行で:
_context.Database.Initialize(true);
毎週このような新しい問題が発生し続けるため、EF の使用を本当に後悔し始めています。誰かが修正に関する洞察を提供できる場合は、大歓迎です。
編集: つまり、Fruit や Apple のエンティティとはまったく関係がないようです。User エンティティの継承されたクラスを追加しましたが、それが原因で問題が発生しています。