Sah*_*any 10 .net c# entity-framework ef-code-first
我想测试一个非常简单的Code-First示例.我有一个被调用的类PurchaseItem,它不是从任何基类继承的,也没有其他类从它继承.它与其他模型完全无关:
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; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的数据库上下文代码.我将数据库初始化程序设置为null,因为我已经有了数据库:
public class MiniContext : DbContext
{
public MiniContext()
{
Database.SetInitializer<MiniContext>(null);
}
public DbSet<PurchaseItem> PurchaseItems { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是保存记录的代码:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
没有继承.根本没有遗产.只是一个简单的独立表.但我得到的是:
列名称'Discriminator'无效.
上context.SaveChanges();线.怎么了?我该怎么办?
更新:我已经看过EF Code First"无效的列名'判别器'"但没有继承问题.那个问题并没有解决我的问题.在那个问题中,OP确实在他的代码中有继承.
小智 4
您的连接字符串可能与您的上下文不同!请查看这篇文章。
实体框架遵循约定优于配置的思想流派。这意味着,即使在查找相关连接字符串时,实体框架也会使用上下文类的名称(在本例中MiniAccounting)并尝试在配置文件中查找具有该名称的连接字符串。
然而,如果它没有找到任何东西,它就会回退到 SQL 的轻型版本(我猜是 SQL CE 或 SQL Express,不确定),自己创建一个数据库,并尝试插入到其中。
对于您的情况,请检查配置文件,并查看它是否与您的上下文类的名称匹配。如果没有,请使用此构造函数:
public class MiniContext : DbContext
{
public MiniContext()
: base("YourConnectionStringNameHere")
{
Database.SetInitializer<MiniContext>(null);
}
public DbSet<PurchaseItem> PurchaseItems { get; set; }
}
Run Code Online (Sandbox Code Playgroud)