Сначала это должен быть простой код EF Code, но я не могу обернуться вокруг документации, и все примеры, которые я нахожу, взяты из более старых версий. Я работаю с последней (4.1).
В любом случае, у меня есть такие модели, как:
public class Foo
{
public int ID { get; set; }
public Bar Bar { get; set; }
}
public class Bar
{
public int ID { get; set; }
public string Value { get; set; }
}
Я использовал некоторые строительные леса в Asp.Net MVC для создания своих контроллеров / репозиториев, и когда я создаю объект 'Foo', он также создает объект 'Bar', даже если я установил свойство 'Bar' из чего-то, хранящегося в базы данных.
public class FooViewModel
{
public int ID { get; set; }
public int BarID { get; set; }
}
public ActionResult Create(FooViewModel foo)
{
var entity = new Foo()
{
ID = foo.ID,
Bar = _barRepository.Find(foo.BarID)
};
_fooRepository.InsertOrUpdate(entity);
_fooRepository.Save();
// more stuff
}
Как я могу использовать свободный синтаксис для EF, чтобы не дать ему создать новую строку 'Bar' в базе данных?
Обновление
Вот сгенерированный код репозитория:
public void InsertOrUpdate(Foo foo)
{
if (foo.ID == default(int)) {
// New entity
context.Foo.Add(foo);
} else {
// Existing entity
context.Foo(foo).State = EntityState.Modified;
}
}
public void Save()
{
context.SaveChanges();
}