我有一个关于WCF DataService和实体框架4.1(代码优先)的问题。所以我在web服务器上有一个数据服务:
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class CrmDataService : DataService<CrmDataContext>
{
private static CrmDataContext _mdc;
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
config.UseVerboseErrors = true;
}
protected override CrmDataContext CreateDataSource()
{
_mdc = new CrmDataContext(@"Data Source=localhost;Database=MyDb;User Id=sqluser;Password=111111;") { TablePrefix = "crm_" };
_mdc.Configuration.ProxyCreationEnabled = false;
return _mdc;
}
我还有一个CrmDataContext使用的实体对象列表(如公司、地址、人员等)在将此服务添加到我的客户端应用程序中(例如,添加到服务命名空间中)后,我得到了相同的实体对象,但在服务命名空间中。当然,如果我想通过数据服务获得任何Company对象(例如),它会从命名空间Services返回一组实体对象。
所以我的问题是,我如何告诉数据服务使用我的真实实体对象,而不在我的项目中创建这些其他代理对象?如果无法做到,那么我如何将从数据服务中获得的对象复制到我的真实实体中呢?
我的目标是通过使用数据上下文的数据服务从服务器获取一些实体对象,然后在客户端将它们相同。我想对本地和服务器端的所有实体对象使用一个程序集。
如果要使用相同的对象,则不需要将服务添加到客户端应用程序中。只需将包含类型的程序集添加到引用的程序集中,然后在客户端应用程序中,使用服务uri创建DataServiceContext。
你必须这样做:
上下文。CreateQuery(entitysetName)。
T是您在服务和客户端之间使用的常见类型。
需要记住的一点是,如果实体中的键不遵循约定,则可能需要在类型上添加DataServiceKeyAttribute或DataServiceEntityAttribute。
希望这能有所帮助。
谢谢Pratik