Как службы Риа управляют транзакциями - PullRequest
2 голосов
/ 26 марта 2011

Я узнал, как мы можем настроить транзакции в Entity Framework, используя TransactionScope, в одном другом моем вопросе. Однако это все еще смущает меня! Я имею в виду, как службы RIA выполняют транзакции и как мы можем указать параметры транзакции? Я имею в виду, предположим, что на клиенте в Silverlight мы указываем что-то вроде этого: -

someContext.Add(someEntity1);
someContext.Add(someEntity2);
someContext.Add(someEntity3);

Теперь, когда я позвоню someContext.SubmitChanges(), это вызовет InsertSomeEntity() на сервере в моем классе обслуживания домена. Какова гарантия того, что все три записи будут вставлены в базу данных, и если одна из них не удастся, все они выйдут из строя? И как мы можем изменить эти параметры?

1 Ответ

5 голосов
/ 28 марта 2011

Ссылка Чанда имеет хороший пример. WCF RIA представит набор изменений для SubmitChanges, содержащий все 3 добавления. В вашем DomainService вы можете переопределить метод PersistChanges для завершения транзакции.

public class SomeEntityDomainService : DomainService
{
    SomeEFContext _someEFContext;
    public SomeEntityDomainService()
    {
        _someEFContext = new SomeEFContext();
    }

    public void InsertSomeEntity(SomeEntity someEntity)
    {
        // Called 3 times in your example
        _someEFContext.SomeEntities.Add(someEntity);
    }

    protected override bool PersistChangeSet()
    {
        // Called exactly once per SubmitChanges() in Silverlight
        _someEFContext.SaveChanges();
    }
}

Все это происходит в одном запросе от клиента к серверу, а не в 3 запросах.

...