在WCF中使用EF实体类
我正在创建一个基于SOA的应用程序,我已经使用Framework 4.0创建了WCF服务项目,在其中我使用实体框架,在WCF操作契约方法中我使用EF生成的类,但WCF无法识别这些对象,当我在designer模式下检查这些类时,它们如下所示在WCF中使用EF实体类,wcf,entity-framework,Wcf,Entity Framework,我正在创建一个基于SOA的应用程序,我已经使用Framework 4.0创建了WCF服务项目,在其中我使用实体框架,在WCF操作契约方法中我使用EF生成的类,但WCF无法识别这些对象,当我在designer模式下检查这些类时,它们如下所示 [EdmEntityTypeAttribute(NamespaceName="quizTestDBModel", Name="tbl_adminUser")] [Serializable()] [DataContractAttribute(Is
[EdmEntityTypeAttribute(NamespaceName="quizTestDBModel", Name="tbl_adminUser")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class tbl_adminUser : EntityObject
{
#region Factory Method
/// <summary>
/// Create a new tbl_adminUser object.
/// </summary>
/// <param name="adminUserId">Initial value of the adminUserId property.</param>
public static tbl_adminUser Createtbl_adminUser(global::System.Int32 adminUserId, global::System.String name, global::System.String userid, global::System.String password)
{
tbl_adminUser tbl_adminUser = new tbl_adminUser();
tbl_adminUser.adminUserId = adminUserId;
return tbl_adminUser;
}
#endregion
#region Primitive Properties
/// <summary>
/// No Metadata Documentation available.
/// </summary>
[EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
[DataMemberAttribute()]
public global::System.Int32 adminUserId
{
get
{
return _adminUserId;
}
set
{
if (_adminUserId != value)
{
OnadminUserIdChanging(value);
ReportPropertyChanging("adminUserId");
_adminUserId = StructuralObject.SetValidValue(value);
ReportPropertyChanged("adminUserId");
OnadminUserIdChanged();
}
}
}
private global::System.Int32 _adminUserId;
partial void OnadminUserIdChanging(global::System.Int32 value);
partial void OnadminUserIdChanged();
#endregion
}
它给出了该方法的错误,“该操作在WCF测试客户端中不受支持,因为它使用类型tbl_adminUser”
谢谢如果您正在跨服务边界传递特定于平台的数据,那么您就没有使用SOA 实体框架类特定于.NET和实体框架。不要让它们越过服务边界 我还注意到,您希望将您的客户机置于您的命名约定(
tbl\u adminUser
)的约束之下,并考虑到其中涉及到一些表。为什么服务的调用者需要知道您通过使用名为tbl\u adminUser
的表实现了“管理员用户”的概念
您应该自己创建一个名为的数据传输对象类,例如,AdminUser
。它应该具有管理员用户所有感兴趣的公共方面的属性(显然,只是AdminUserId
)。它应该没有任何行为——只有数据
这是应该由您的服务发送和接收的类
而且,是的,您必须实现映射代码。如果您要跨服务边界传递特定于平台的数据,那么您就没有使用SOA 实体框架类特定于.NET和实体框架。不要让它们越过服务边界 我还注意到,您希望将您的客户机置于您的命名约定(
tbl\u adminUser
)的约束之下,并考虑到其中涉及到一些表。为什么服务的调用者需要知道您通过使用名为tbl\u adminUser
的表实现了“管理员用户”的概念
您应该自己创建一个名为的数据传输对象类,例如,AdminUser
。它应该具有管理员用户所有感兴趣的公共方面的属性(显然,只是AdminUserId
)。它应该没有任何行为——只有数据
这是应该由您的服务发送和接收的类
是的,您必须实现映射代码。错误只是说WCF测试客户端不支持您的合同,但这并不意味着WCF本身不支持。WCF测试客户端用于测试最常见的场景,它不支持所有WCF功能。编写测试应用程序或使用更强大的测试工具(如SoapUI)来验证您的服务是否正常工作
还要遵循@John的建议,因为您当前的设计具有糟糕的命名约定,它公开了基于
EntityObject
的实体,并且远离SOA。根据您的描述,它是作为服务公开的简单CRUD。使用WCD数据服务,您将更快地获得类似的结果。错误只是说WCF测试客户端不支持您的合同,但这并不意味着WCF本身不支持您的合同。WCF测试客户端用于测试最常见的场景,它不支持所有WCF功能。编写测试应用程序或使用更强大的测试工具(如SoapUI)来验证您的服务是否正常工作
还要遵循@John的建议,因为您当前的设计具有糟糕的命名约定,它公开了基于
EntityObject
的实体,并且远离SOA。根据您的描述,它是作为服务公开的简单CRUD。使用WCD数据服务,您将更快地获得类似的结果。我不想为映射创建额外的类,我想在我的操作合同中使用tbl_adminUser谢谢我不想为映射创建额外的类,我想在我的操作合同中使用tbl_adminUser谢谢,是的“tbl_adminUser”这是我的表,其中有很多属性,但为了显示我删除了tbl_adminUser的其他数据属性和成员,我需要重命名它们,实际上我想注册一个用户,这样客户端应该发送一个adminUser对象,EF应该保存在DB中,这是我的全部想法,我的服务上的映射是必须的,我必须手动执行,还有其他方法吗?有数百种方法可以避免编写重复的代码。使用一个。这是许多中的一个。不过我从未使用过它。非常感谢,是的“tbl_adminUser”这是我的表,其中有许多属性,但为了显示我删除了tbl_adminUser的其他数据属性和成员,我需要重命名它们,实际上我想注册一个用户,以便客户端发送一个adminUser对象,EF应该将其保存在DB中,这就是我的全部想法,因为在我的服务上映射是必须的,我将不得不手动进行,还有其他方法吗?有数百种方法可以避免编写重复代码。使用一个。这是许多中的一个。不过我从来没用过。
int adminRegister(tbl_adminUser _adminUser);