Подтвердить что ты не робот

Структура объекта, столбец дискриминатора, но не наследование

Я хочу проверить очень простой пример 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; }
}

Вот код моей базы данных. Я установил инициализатор базы данных на null, потому что у меня уже есть база данных:

public class MiniContext : DbContext
{
    public MiniContext()
    {
        Database.SetInitializer<MiniContext>(null);
    }

    public DbSet<PurchaseItem> 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();
    }
}

Нет наследования. Наследования вообще нет. Просто простая, автономная таблица. Но я получаю:

Недопустимое имя столбца "Дискриминатор".

В строке context.SaveChanges();. Что не так? Что мне делать?

Обновление: я уже видел EF Code First "Недопустимое имя столбца" Дискриминатор ", но не вопрос наследования. Этот вопрос не решил мою проблему. В этом вопросе OP do имеет наследование в своем коде.

4b9b3361

Ответ 1

Строка подключения может отличаться от вашего контекста! Пожалуйста, проверьте статью.

Entity Framework следует за Конвенция по конфигурации. Это означает, что даже при поиске связанной строки соединения Entity Framework использует имя вашего класса контекста (в данном случае MiniAccounting) и пытается найти строку подключения с этим именем в файле конфигурации.

Однако, если он ничего не находит, он отбрасывает световую версию SQL (я думаю, SQL CE или SQL Express, не уверен в этом), создает базу данных сам по себе и пытается вставить в нее.

В вашем случае проверьте файл конфигурации и посмотрите, совпадает ли оно с именем вашего класса контекста. Если нет, укажите этот конструктор:

public class MiniContext : DbContext
{
    public MiniContext()
         : base("YourConnectionStringNameHere")
    {
        Database.SetInitializer<MiniContext>(null);
    }

    public DbSet<PurchaseItem> PurchaseItems { get; set; }
}