이것은 처음에는 EF 코드와 관련된 단순한 것이어야하지만 필자가 찾던 모든 예제는 이전 버전의 것입니다. 나는 최신 (4.1)과 함께 일하고있다.두 개의 DbContext가있는 EF 코드
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와 일부 비 계를 사용하고 난 '푸'객체를 생성 할 때, 그것은 또한 '바'작성 : 어쨌든
나는 일부 모델 같은이 비록 내가 데이터베이스에 저장된 무언가로부터 '막대기'속성을 설정하더라도 개체.
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에 유창한 구문을 사용하여 데이터베이스에 새로운 '막대'행을 만드는 것을 중지하려면 어떻게해야합니까?
업데이트 여기
생성 된 저장소 코드 :
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'는 동일한 DB 컨텍스트 인스턴스를 공유합니까? –
Doh ... 예, 그게 문제였습니다. 나는 마술적인 EF 엔티티 트래킹 대신 Bar 오브젝트의 프라이 머리 키를 볼 것이라고 생각했다. 또한, 나는 두 개의 저장소가 문맥을 공유 할 것이라고 생각했다. IOC를 추가 할 때이를 설정하기도합니다. 네가 원한다면 너는 그 대답을 할 수있어서 내가 이것을 닫을 수있다. –