В Entity Framework 4.2 У меня есть объект Trips, который может иметь 0 .. * PlacesOfInterest и 0 .. * Photos. Достопримечательности 1 Поездка и 0 .. * Фотографии. Фотографии имеют 1 поездку и 0,1 достопримечательности.Тернарные отношения в Entity Framework
Когда я пытаюсь добавить фото, я использую этот метод:
public static Guid Create(string tripId, Model.Photo instance)
{
var context = new Model.POCOTripContext();
var cleanPhoto = new Model.Photo();
cleanPhoto.Id = Guid.NewGuid();
cleanPhoto.Name = instance.Name;
cleanPhoto.URL = instance.URL;
//Relate the POI
cleanPhoto.PlaceOfInterest = Library.PlaceOfInterest.Get(instance.PlaceOfInterestId);
context.PlacesOfInterest.Attach(cleanPhoto.PlaceOfInterest);
//Relate the trip
cleanPhoto.Trip = Library.Trip.Get(new Guid(tripId));
context.Trips.Attach(cleanPhoto.Trip);
//Add the photo
context.Photos.AddObject(cleanPhoto);
context.SaveChanges();
return cleanPhoto.Id;
}
Когда я проверить это, я получаю, когда Trip прилагается:
An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
Поездка действительно кажется в объекте context, но PlacesOfInterest делает это еще до утверждения Attach. Я не понимаю, как это работает, может кто-то уточнить?
EDIT: Вот POI и Trip Геттеры
public static Model.Trip Get(Guid tripId)
{
using (Model.POCOTripContext context = new Model.POCOTripContext())
{
var tripEntity = context.Trips.Include("PlacesOfInterest").Include("PlacesOfInterest.PoiAttributes").Include("Photos").FirstOrDefault(c => c.Id == tripId) ?? new Model.Trip();
return tripEntity;
}
}
public static Model.PlaceOfInterest Get(Guid poiId)
{
using (Model.POCOTripContext context = new Model.POCOTripContext())
{
var poiEntity = context.PlacesOfInterest.Include("PoiAttributes").FirstOrDefault(c => c.Id == poiId) ?? new Model.PlaceOfInterest();
return poiEntity;
}
}
Благодаря
S
Я не думаю, что вам нужно снова прикрепить связанные элементы (я считаю, что Приложить вызов является излишним, пока соответствующие элементы уже прикреплены через сеттеры). Вы пробовали без Attach? –
Да, затем он пытается вставить. См. Этот вопрос: http://stackoverflow.com/questions/9915216/why-does-adding-a-child-element-to-my-entity-framework-try-and-insert-a-new-pare –
Можете ли вы показать код в 'Library.Trip.Get (...)' и 'Library.PlaceOfInterest.Get (...)'? – Slauma