entity framework,鉴别器列,但没有inheritance

我想测试一个非常简单的Code-First示例。 我有一个名为PurchaseItem的类,它不是从任何基类inheritance的,也没有其他类从它inheritance。 它根本与其他模型无关:

 public class PurchaseItem { public int Id { get; set; } public string Buyer { get; set; } public string Item { get; set; } public int Quantity { get; set; } public int Price { get; set; } } 

这是我的数据库上下文代码。 我将数据库初始化程序设置为null ,因为我已经有了数据库:

 public class MiniContext : DbContext { public MiniContext() { Database.SetInitializer(null); } public DbSet PurchaseItems { get; set; } } 

这是保存记录的代码:

 public void SavePurchaseItems(string buyer, string item, int quantity, int price) { PurchaseItem purchaseItem = new PurchaseItem { Buyer = buyer, Item = item, Quantity = quantity, Price = price }; using (MiniContext context = new MiniContext()) { context.PurchaseItems.Add(purchaseItem); context.SaveChanges(); } } 

没有inheritance。 完全没有inheritance权。 只是一个简单的独立表。 但我得到的是:

列名称’Discriminator’无效。

context.SaveChanges(); 线。 怎么了? 我该怎么办?

更新:我已经看过EF Code First“无效的列名’判别器’”但没有inheritance问题。 那个问题并没有解决我的问题。 在那个问题中,OP在他的代码中有inheritance。

您的连接字符串可能与您的上下文不同! 请查看这篇文章 。

entity framework遵循“ 公约优于配置 ”思想。 这意味着即使在查找相关连接字符串Entity Framework时,也会使用上下文类的名称(在本例中为MiniAccounting ),并尝试在配置文件中查找具有该名称的连接字符串。

但是,如果它没有找到任何东西,那么它是SQL的轻量级版本(我猜SQL CE或SQL Express,不确定它),它自己创建一个数据库,并尝试插入它。

在您的情况下,请检查配置文件,并查看它是否与上下文类的名称匹配。 如果没有,请使用此构造函数:

 public class MiniContext : DbContext { public MiniContext() : base("YourConnectionStringNameHere") { Database.SetInitializer(null); } public DbSet PurchaseItems { get; set; } }