实体框架,鉴别器列,但没有继承

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)