這應該是一個簡單的涉及EF代碼的第一,但我不能包裝我的頭周圍的文檔,我發現所有的例子是從舊版本。我正在使用最新的(4.1)。EF代碼優先與兩個DbContexts
反正我有一些車型,如:
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創建我的控制器/存儲庫,當我創建一個「富」的對象,還創建了一個「酒吧」對象,即使我從存儲在數據庫中的東西設置'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();
}
您的_fooRepository和_barRepository共享相同的數據庫上下文實例嗎? –
Doh ......是的,那是問題所在。我在想,它會查看Bar對象的主鍵而不是一些神奇的EF實體跟蹤。另外,我認爲這兩個存儲庫會共享一個上下文。當我添加IOC時,我可以設置它來做到這一點。如果你願意的話,你可以回答這個問題,這樣我就可以關閉它。 –