在WCF中使用EF实体类

在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

我正在创建一个基于SOA的应用程序,我已经使用Framework 4.0创建了WCF服务项目,在其中我使用实体框架,在WCF操作契约方法中我使用EF生成的类,但WCF无法识别这些对象,当我在designer模式下检查这些类时,它们如下所示

[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);