wcf类库中的WCF数据服务(让客户端通过服务与数据库通信)

时间:2012-10-20 15:46:35

标签: c# wcf ado.net wcf-data-services

我正在创建一个简单的应用程序,客户端需要与服务器通信才能执行简单的任务。服务器由数据库和WCF服务组成。客户端连接到服务和数据库。

我正在使用ado.net实体数据模型在数据库上创建CRUD操作。 我希望客户端通过该服务创建CRUD操作,并避免让客户端连接到数据库。

当我在返回实体对象的服务上创建方法时,我得到一个异常。例如,我有方法:

    public Data.Scheduling[] GetSchedules()
    {
        Data.TCEntities1 entities = new Data.TCEntities1();

        var a = entities.Schedulings.ToArray();

        return a;
    }

我不想重新创建Schedulings类和其他实体类,以使我的方法有效。 如何通过我的wcf类库服务公开创建,读取,更新和删除操作,而无需客户端连接到数据库?

修改

如果我的问题令人困惑,请更多解释我的问题:

在我的服务器应用程序(wcf服务)中,我有基本功能和ado.net实体数据类。因为我有ado.net实体数据类,所以我可以非常轻松地从数据库中提取结果,例如:

    Data.TCEntities1 entities = new Data.TCEntities1();
    var a = entities.Schedulings.ToList(); // schedulings is a table in my database

正如您所看到的那样,这些行将从数据库中的表格调度中检索所有调度行,并且将使用该文章(我将有一个List)。如果我的wcf服务返回List<Data.Scheduling>,为什么会出错?我想阻止客户端对数据库进行排队,因为它们只执行非常简单的操作(数据库只有2个表)。

2 个答案:

答案 0 :(得分:1)

WCF通过公开合同来工作。因为您使用ADO.NET数据模型,所以您将获得自动生成的“部分”类。它们没有标记为DataContractDataMember,WCF需要它们才能在客户端工作。不管怎样,您需要将部分类复制到新的类/文件中并添加属性,以便它们显示在客户端上。

[DataContract]
public partial class Entity1
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Property1 { get; set; }

    [DataMember]
    public string Property2 { get; set; }
}

答案 1 :(得分:0)

这是令人困惑的问题。您创建CRUD WCF调用,客户端调用CRUD函数。服务与数据库对话。客户谈到服务。客户端不与数据库通信。