Вот как мы реализуем универсальную службу Save() в WCF для наших сущностей EF. TT делает работу за нас. Несмотря на то, что у нас нет никаких проблем с этим, я ненавижу предполагать, что это лучший подход (даже если это может быть так). Вы, ребята, кажетесь чертовски умными и полезными, поэтому я подумал, что задам вопрос:
Есть ли способ лучше?
[OperationContract]
public User SaveUser(User entity)
{
bool _IsDeleted = false;
using (DatabaseEntities _Context = new DatabaseEntities())
{
switch (entity.ChangeTracker.State)
{
case ObjectState.Deleted:
//delete
_IsDeleted = true;
_Context.Users.Attach(entity);
_Context.DeleteObject(entity);
break;
default:
//everything else
_Context.Users.ApplyChanges(entity);
break;
}
// now, to the database
try
{
// try to save changes, which may cause a conflict.
_Context.SaveChanges(System.Data.Objects.SaveOptions.None);
}
catch (System.Data.OptimisticConcurrencyException)
{
// resolve the concurrency conflict by refreshing
_Context.Refresh(System.Data.Objects.RefreshMode.ClientWins, entity);
// Save changes.
_Context.SaveChanges();
}
}
// return
if (_IsDeleted)
return null;
entity.AcceptChanges();
return entity;
}
OptimisticConcurrencyException
s? Что вызывает их появление? Я никогда не видел его раньше. - person StriplingWarrior   schedule 24.06.2011