Риа DomainService входной параметр странность, Удалить это особенное? - PullRequest
4 голосов
/ 27 августа 2009

В службе RIA Domain я добавил несколько служебных функций. Например, у нас есть ...

public virtual CmsDealer GetCmsDealerById(string id)
{
    return this.Context.CmsDealerSet
        .Include("CmsItemState")
        .FirstOrDefault(p => p.Id == id);
}

Теперь у этой функции есть свои проблемы, если ее идентификатор не существует, но пока что это можно сделать. Важно то, что функция компилируется и выполняется.

Однако похожая функция ...

public virtual void DeleteCmsDealerById(string id)
{
    var dealer = this.Context.CmsDealerSet
        .FirstOrDefault(d => d.Id == id);

    if (dealer != null)
    {
        DeleteCmsDealer(dealer);
    }
}

Бросает ошибку времени компиляции.

*Parameter 'id' of domain method 'DeleteCmsDealerById' must be an entity type exposed by the DomainService, either directly via a query operation, or indirectly via an included association.*

Дело в том, что я могу понять, что параметр (string id) неприемлем для EF, но почему все нормально в одном случае, а не в другом?

Ввод приветствуется:)

1 Ответ

10 голосов
/ 27 августа 2009

Соглашение состоит в том, что методы удаления имеют подпись, которая принимает сущность. Строка не является сущностью. Сущность - это тип, который a) имеет член с [Key] и b) является типом, возвращаемым одним из методов запроса в доменной службе.

Методы запросов, с другой стороны, не принимают сущности в качестве параметров. Следовательно, строка является нормальным параметром для метода запроса get.

В вашем случае вы хотите, чтобы DeleteCmsDealer принимал CmdDealer. Вы по-прежнему можете искать БД внутри вашего метода и удалять загруженный экземпляр, а не присоединять / удалять переданный экземпляр, если это требуется.

Надеюсь, это поможет.

...