엔티티 프레임 워크 4, WCF 및 Silverlight를 사용하고 있습니다.기존 하위 항목과 함께 새 개체를 추가하면 중복됩니다.
제품과의 많은 관계가 있습니다.
[Order]*--*[Product]
먼저 모델을 사용하면 Entity Framework에서 자동으로 조인 테이블을 만듭니다. 서버 측에서 모든 것을 만들면 모든 것이 잘됩니다. Silverlight를 사용할 때 문제가 발생합니다.
제품 목록을 가져 와서 화면에 표시합니다. 사용자가 새 주문을 만들고 주문을 분리해야하는 제품을 선택합니다. 그런 다음 WCF에 제출됩니다. 서버 측에
var order = new order();
order.CustomerName = customerTextBox.Text;
...
order.Products = new ObservableCollection<Product>();
foreach (var product in selectedProducts)
{
order.Products.Add(product);
}
var proxy = new OrderService();
proxy.CreateOrderAsync(order);
, 그것은
var db = new Model1Container();
db.Products.AddObject(order);
db.SaveChanges();
그러나 뭔가 이상한 일이 그냥 아주 간단한 추가 방법입니다. 이것이 저장되면 데이터베이스의 거의 모든 것이 몇 번 복제됩니다. 내 생각 엔 Entity Framework가 순환 링크를 몇 번 통과하기 때문입니다.
db.Categories.Attatch (order)로 변경해 보았습니다. 그러나 이로 인해 아무 것도 구원받지 못했습니다. 주문을 저장하기 전에 반복적으로 각 제품을 수동으로 연결해 보았습니다. 그러나 객체가 이미 컨텍스트에 첨부되어 있다는 것을 나타내는 예외가 발생합니다.
편집 :는이 제품이 중복되는 것을 중지 수행. 그러나 테이블의 모든 주문은 여전히 복제됩니다. 아직도 모든 관계를 횡단하고 있어야합니까?
db.Orders.AddObject(order);
db.ObjectStateManager.ChangeObjectState(order, EntityState.Added);
foreach (var product in order.Products)
{
db.ObjectStateManager.ChangeObjectState(product, EntityState.Unchanged);
}
db.SaveChanges();
아무 것도 적용하지 않았습니다. Order와 Product 테이블의 모든 내용은 여전히 중복되어 있습니다. –
내가 제안한 것을 취하여 조금 확장했습니다. 이제는 제품이 복제되지 않지만 테이블의 모든 주문은 여전히 복제됩니다. db.Orders.AddObject (order); db.ObjectStateManager.ChangeObjectState (order, EntityState.Added); foreach (순서대로 변수가있는 제품) { db.ObjectStateManager.ChangeObjectState (product, EntityState.Unchanged); } db.SaveChanges(); –
모든 주문은 무엇을 의미합니까?단일 주문을 삽입 하시겠습니까? –