我正在探索使用WCF数据服务和EF4实现Web服务api的想法。意识到某些操作需要复杂的业务逻辑,我决定创建一个与主EF数据上下文部分类同名的部分类,并在那里实现其他方法来处理更复杂的业务逻辑。当直接使用EF上下文对象时,附加方法显示(通过intellisense)并正常工作。当通过WCF数据服务公开EF类并在另一个项目中创建和使用服务引用时,新方法不会显示在intellisense或生成的Service.cs文件中(当然,我更新了引用甚至是删除它并重新添加它)。原生数据方法(即context.AddObject()和context.AddToPeople())可以正常工作,但新方法甚至无法使用。
我的EF课程看起来像这样:
namespace PeopleModel
{
//EF generated class
public partial class PeopleEntities : ObjectContext
{
//Constructors here
//Partial Methods here
//etc....
}
//Entity classes here
//My added partial class
public partial class PeopleEntities
{
public void AddPerson(Person person)
{
base.AddObject("People", person);
}
}
}
.svc文件没什么特别之处。包含自动生成的代理类的Reference.cs文件没有新的“AddPerson()”方法。
我的问题是: 1.任何想法为什么Web服务没有看到添加的部分类,但直接使用EF对象时,方法是否存在并且正常工作? 2.使用具有其他方法的分部类是否能够很好地解决使用EF生成的模型处理复杂业务规则的问题?
我喜欢让oData框架为公开的数据对象提供查询机制的想法,以及您可以拥有一个具有SOAP的一些优点的宁静Web服务这一事实。
答案 0 :(得分:2)
只有在派生自DataService的类中存在服务操作时,才会识别它们。 WCF数据服务不会查看这些上下文类。另请注意,默认情况下不公开方法,您需要使用WebGet或WebInvoke属性,并允许在InitializeService实现中访问它们。 http://msdn.microsoft.com/en-us/library/cc668788.aspx