Нет причин, по которым вы не можете расширять методы вставки пластины котла, которые генерирует RIA с вашей собственной семантикой.Приведенный ниже код приведен в качестве быстрого примера, например, для метода, который делает то, что вы искали.
Я бы посоветовал вам убедиться, что этот маршрут не вызывает проблем.Я заметил, что клиентская RIA имеет тенденцию иметь объекты в своих контекстах после выполнения операций.
Надеюсь, это поможет.
public void InsertFoo ( Foo foo )
{
using ( FooEntities db = new FooEntities() )
{
var fooRecord = db.Foos.Where( a => a.fooId == foo.fooId ).SingleOrDefault();
if (fooRecord.Any())
{
// Insert
if ( ( foo.EntityState != EntityState.Detached ) )
this.ObjectContext.ObjectStateManager.ChangeObjectState( foo, EntityState.Added );
else
this.ObjectContext.SystemAccounts.AddObject( foo );
}
else
{
// Update
fooRecord.Field = foo.Field;
db.SaveChanges();
this.ObjectContext.SystemAccounts.AttachAsModified( foo, this.ChangeSet.GetOriginal( foo ) );
}
}
}