2015-01-16 2 views
0

У меня есть два классаEntity Framework Миграция семян повторяющихся строки

public class Category 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

public class Item 
{ 
    public int Id { get; set; } 
    public sting Name { get; set; } 
    public Category Category { get; set; } 
} 

У меня есть EF Миграция и следующее семя:

var instockCategory = new Category() { Name = "InStock" }; 
var outofStockCategory = new Category() { Name = "OutOfStock" }; 

context.Items.AddOrUpdate(
d => d.Name, 
new Item() { Name = "Item1", Category = instockCategory }, 
new Item() { Name = "Item2", Category = outofStockCategory }, 
new Item() { Name = "Item3", Category = outofStockCategory } 
); 

линия "d => d.Name" убеждается что, основываясь на имени элемента, при повторной подаче базы данных не будет повторяющихся записей. Однако в первый раз, когда я выполняю это, две категории создаются с идентификаторами 1 и 2. Но во второй раз, когда я запускаю это, создаются 3 новые категории! Могу ли я исправить это, не добавив сначала каждую категорию?

ответ

2

Вы также должны использовать AddOrUpdate для своих категорий.

var instockCategory = default(Category); 
var outofStockCategory = default(Category); 

context.Set<Category>().AddOrUpdate(
    c => c.Name, 
    instockCategory = new Category() { Name = "InStock" }, 
    outofStockCategory = new Category() { Name = "OutOfStock" } 
); 

context.Items.AddOrUpdate(
    d => d.Name, 
    new Item() { Name = "Item1", Category = instockCategory }, 
    new Item() { Name = "Item2", Category = outofStockCategory }, 
    new Item() { Name = "Item3", Category = outofStockCategory } 
); 

Явный DbSet в вашем классе Контекста не требуется.

public class Context : DbContext 
{ 
    public DbSet<Item> Items { get; set; } 
} 
+0

Возможно, но я не хочу, потому что тогда мне нужно будет добавить категории DbSet, и пока у меня его нет. Может все еще сделать это, просто спрашивая, возможно ли что-то еще. –

+0

@ DennisvanderStelt обновляет ответ? Что именно вы имеете в виду при добавлении категории DbSet? –

+0

Спасибо Аксель, хороший звонок о наборе

Смежные вопросы