2013-12-20 6 views
9

Я пытаюсь использовать Code First для создания базы данных SQL CE 4. При запуске пример кода ниже, Entity Framework вставляет новые записи для продукта каждый раз, даже если данные точно такие же. Что мне нужно сделать, чтобы Entity Framework не создавала дубликаты связанных продуктов? Значения в объекте ForeignID1 и Product являются значениями, которые уже существуют в базе данных, но Entity Framework стирает идентификатор, который я ему даю, и добавляя новый идентификатор.Entity Framework создает новые/повторяющиеся записи для связанных объектов

namespace MyApp.Model 
{ 
    public class MyThing 
    {  
     public int ID { get; set; } 

     [ForeignKey("Product")] 
     public int ForeignID1{ get; set; } 

     public virtual Product Product { get; set; } 
    } 
} 

// Data.DataManager.cs 

public class DataManager : DbContext 
{ 
    public DbSet<Model.MyThing> Things{ get; set; } 
    public DbSet<Model.Product> Products { get; set; } 
} 

Это значения, которые он ввел. Там должно быть только одно значение в таблице, на которую ссылается несколькими MyThings «ы

enter image description here

ответ

6

Для того, чтобы избежать дублирования необходимо прикрепить соответствующий объект в контексте:

context.Products.Attach(myThing.Product); 
context.Things.Add(myThing); 

Или ...

myThing.Product = null; 
context.Things.Add(myThing); 

... будет работать хорошо, если вы установили myThing.ForeignID1 к существующему продукту ID.

+0

Это сработало. Но теперь я думаю, что часть моей проблемы заключается в том, что он использует мой идентификатор в качестве ключа Identity, который приводит к тому, что идентификаторы будут установлены в 1, 2, 3 и т. Д. – teynon

+0

В итоге я использовал комбинацию этого и '[ DatabaseGenerated (DatabaseGeneratedOption.None)] 'для отключения столбца идентификации. Я также запускал собственные процессы обновления для каждого дочернего элемента (Product). – teynon

+0

Также важно отметить использование Attach() ПЕРЕД редактированием свойств объекта, который вы хотите добавить в БД .... Может быть, я был просто тупой ... –

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