4

在 RIA 域服务中,我添加了一些实用功能。例如我们有...

public virtual CmsDealer GetCmsDealerById(string id)
{
    return this.Context.CmsDealerSet
        .Include("CmsItemState")
        .FirstOrDefault(p => p.Id == 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.*

问题是,我可以理解(字符串 id)参数对于 EF 是不可接受的,但为什么在一种情况下可以,而在另一种情况下不行?

欢迎输入:)

4

1 回答 1

10

约定是删除方法有一个带有实体的签名。字符串不是实体。实体是 a) 具有 [Key] 的成员并且 b) 是由域服务中的查询方法之一返回的类型。

另一方面,查询方法不将实体作为参数。因此 string 是 get 查询方法的 ok 参数。

在您的情况下,您将希望 DeleteCmsDealer 接受 CmdDealer。您仍然可以在方法中查找数据库并删除您加载的实例,而不是在需要时附加/删除传入的实例。

希望有帮助。

于 2009-08-27T15:02:45.420 回答