Добавление новых записей в EF завершается с ошибкой NULL - PullRequest
0 голосов
/ 13 ноября 2018

Мне нужно загрузить записи из существующей базы данных в новую базу данных, используя запрос LINQ, используя LINQPad.Если запись существует в базе данных, обновите имя.В противном случае вставьте запись.В настоящее время новая БД пуста.Этот скрипт будет запускаться периодически, поэтому я должен проверять наличие обновлений.У меня есть код, который загружает существующие и новые записи в два списка для сравнения.Я перебираю список:

foreach (Coaster oldCoaster in listOfOldCoasters) {
    var coaster = listOfNewCoasters.Where(c => c.coasterId == oldCoaster.coasterId).FirstOrDefault();

    if (coaster != null) {
        coaster.Name = oldCoaster.Name;
    } else {
        coaster = new Models.Coaster();
        coaster.CoasterId = oldCoaster.coasterId;
        coaster.Name = oldCoaster.Name;
        //newCoasterDbContext.Coasters.Attach(coaster);
        newCoasterDbContext.Coasters.Add(coaster);
    }
}

newCoasterDbContext.SaveChanges();

Когда я запускаю код с помощью метода «Добавить», я получаю исключение «OriginalValues ​​нельзя использовать для сущностей в состоянии« Добавлен ».»Копая глубже, я вижу это сообщение:

Cannot insert the value NULL into column 'CoasterId', table 'Coaster'; column does not allow nulls. 

Я задаю первичный ключ, о котором идет речь, поэтому я, должно быть, что-то упускаю из EF, почему это не удается.Если я раскомментирую оператор «Attach» и попробую его вместо «Add», сценарий запустится, но в базу данных ничего не будет вставлено.

Класс My Coaster:

public class Coaster
{
    public System.Guid CoasterId { get; set; }
    public string Name { get; set; }

    public Coaster()
    {
        CoasterId = System.Guid.NewGuid();
    }
}

На основена других постах я пытался добавить атрибуты к PK:

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]

И я пытался изменить метод OnModelCreating:

HasKey(x => x.CoasterId).Property(x => x.CoasterId).HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None);

Это не помогло мне.Что я упустил, что заставляет Entity Framework игнорировать GUID, который я прикрепил к полю первичного ключа?

1 Ответ

0 голосов
/ 13 ноября 2018

Вы не можете исправить глупость, но вы можете исправить глупые ошибки.Итак, как я уже говорил, в методе OnModelCreating у меня была такая строка:

HasKey(x => x.CoasterId).Property(x => x.CoasterId).HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None);

Я думал, что это не сработало, но это только потому, что чуть позже в методе была строка, которая перезаписывалаизменить:

Property(x => x.FpoDistrictId).HasColumnName(@"FPODistrictId").HasColumnType("uniqueidentifier").IsRequired().HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity);

По крайней мере, я понял это ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...