Метод заполнения вставляет дополнительные сущности со значениями NULL - PullRequest
0 голосов
/ 05 декабря 2018

У меня неожиданно возникло такое странное поведение (я сравнил свои файлы в системе управления версиями (tfs), чтобы убедиться, что я ничего не изменил и не нашел ничего другого).

Я заполняю свою базу данных некоторыми метаданными, и я вижу, что у нее очень странное поведение, которого я никогда раньше не видел.Я вставляю сущность «Продукт», и она вставляет эту сущность 2 раза , первая вставка верна и имеет все, что должна иметь, другая имеет свойства NULL (строковые значения), но некоторые (например, datetime) имеютзначения.

Я понятия не имею, почему это происходит, это происходит, когда я вызываю base.Seed (ctx);метод, который я уверен, так как я остановил Webapp после этого, прежде чем он достиг чего-либо еще.

Эта сущность Product имеет связанные сущности, для которых все остальные данные правильно созданы в моих таблицах.Нет ничего плохого, кроме этого продукта.

Я пытался посеять только 1 сущность продукта вместо того, чтобы добавлять другие, те же самые результаты. Я что-то наблюдал: еще были посеяны другие сущности, поэтому я пошел и посмотрел, где это произошло,это произошло при добавлении Закупочной цены на картинке:

Мой продукт:

public class Product : BaseEntity
{
   public  ICollection<Supplier> Suppliers { get; set; }
   public  ICollection<PurchasePrice> PurchasePrices { get; set; }
}

Мой поставщик:

public class Supplier : BaseEntity
{
   public ICollection<PurchasePrice> PurchasePrices { get; set; }
   public  ICollection<Product> Products { get; set; }
}

Моя заявка на покупку:

public  class PurchasePrice:BaseEntity
{
   public decimal Value { get; set; }   
   public Supplier Supplier { get; set; }
   public Product Product { get; set; }
}

Засев:

Supplier supplier1 = new Supplier("Microsoft", "Microsoft is the best supplier but its expensive", "btw nummer", "0800-123456", "microsoft@email.com", "contact person name");
ctx.Suppliers.Add(supplier1);

PurchasePrice purchaseprice = new PurchasePrice((decimal)17.70, supplier1);
ctx.PurchasePrices.Add(purchaseprice);

Product product1 = new Product("test product 1", supplier1, purchaseprice);
ctx.Products.Add(product1);

base.Seed(ctx);

Не знаю, куда мне обратитьсяпотому что ничего не изменилось ни в моей модели, ни в моем способе посева.Я пытался использовать AddOrUpdate (), но это не сработало.

Я использую EF6 в веб-приложении MVC с использованием подхода Code-first без миграций (пока).У кого-нибудь есть предложения, пожалуйста?

1 Ответ

0 голосов
/ 11 декабря 2018

РЕДАКТИРОВАТЬ Я создал тестовое приложение, чтобы просто иметь возможность проверять вещи и быть на 100%.Я еще не знаю, почему, но у меня такое же отношение, как и раньше (у ценовых организаций только 1 ссылка на продукт (при создании дубликата)), и у меня нет дубликата ...

Так что я могуесть отношение, которое я хочу, которое равно 1 Цена должна иметь только 1 ссылку на продукт, но я абсолютно не представляю, что здесь происходит ...

Изменение отношения в классе PurchasePrice продукта сущности на ICollection вместо1 Один продукт не не создает дублирование (и создает таблицу PurchasePriceProduct).

Из журналов базы данных (log4net) видно, что из-за отношения EF сначала вставляет продукт (NULL)) для ссылки на ПриобретениеPrice продукта, и вставляет продукт (НЕ NULL) с его ссылками ... (Если кому-то понадобится какое-либо разъяснение по этому вопросу, дайте мне знать, я сделаю все возможное)

Этот пост ДВИГАЛСЯ ЗДЕСЬ . Я хочу поблагодарить всех, кто внес свой вклад!

...