2015-03-30 3 views
0

Я хотел бы знать, как я могу заставить Entity Framework обновлять объект, а не всегда вставлять новый для каждого нового основного объекта.Как я могу заставить Entity Framework обновлять только объекты?

Например:

У меня есть эти объекты:

Главная Объект:

public class ExtraArticleAttributes 
{ 
    [Key] 
    public int extraarticleattributes_id { get; set; } 
    virtual public WorldData world_data { get; set; } 
} 

Его dependencie:

public class WorldData 
{ 
    [Key] 
    public int worlddata_id { get; set; } 
    public string country { get; set; } 

Итак, как я могу сделать Entity Framework при вставке новый атрибут ExtraArticleAttributes проверяет, существует ли уже объект WorldData и обновляется только Это?

Я читал некоторые статьи об этом, и я заметил, что Entity Framework идентифицирует существующий объект в БД с HASH-кодом, поэтому, когда я получаю его от API и пытаюсь вставить его в БД, хотя объект имеет те же данные, Entity Framework не распознает, как существующий объект в БД. Существует ли способ сделать это, не тратя запрос в БД, чтобы проверить, существует ли объект, если true получить его.

ответ

1

Установите состояние объекта в Modified:

using System.Data.Entity; 

// Assuming that there is already an existing WorldData record in the database with id 1 and country 'foo', and you want to change the country to 'bar' 

using (var context = new MyContext()) 
{ 
    var extraArticleAttributes = new ExtraArticleAttributes 
    { 
     world_data = new WorldData 
     { 
      worlddata_id = 1, 
      country = "bar" 
     } 
    }; 

    db.ExtraArticleAttributes.Add(extraArticleAttributes); 
    db.Entry<WorldData>(extraArticleAttributes.world_data).State = EntityState.Modified; 

    db.SaveChanges(); 

    // world data 1 country is now 'bar' 
} 
Смежные вопросы