WCF数据服务中的CRUD操作

时间:2015-08-28 06:49:43

标签: c# odata wcf-data-services

我刚刚开始关注oData并开始研究WCF数据服务。所以我要的可能不合逻辑。我已经实现了基本的东西,比如从实体框架公开数据并使用客户端消费它。

现在我想做其他CRUD操作(创建,更新,删除)并做一些其他业务逻辑,但问题是我不明白在哪里编写代码。现在我所拥有的是SVC文件,其代码如下:

public class OdataPOCService : DataService< POCEntities>
    {
        // This method is called only once to initialize service-wide policies.
        public static void InitializeService(DataServiceConfiguration config)
        {
            config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
        }
    }

我在WCF上工作已经过去了,但实在无法理解我应该在哪里编写我们用于在Operation Contract中编写的代码。

有点无法完成图片。基本问题是:

  1. 我们可以以及如何执行插入,更新和删除。
  2. 在哪里编写业务逻辑。假设我想在曝光之前更改日期格式。
  3. WCF数据服务可以接收像Class和Enums这样的复杂对象,因为没有wsdl。
  4. 一些代码教程或博客确实会有所帮助。

1 个答案:

答案 0 :(得分:1)

我通常会像这样放置我的代码(假设我们的测试模型是BankAccountModel):

[ServiceContract]
public interface IBankAccountService {
    [OperationContract]
    BankAccountModel Insert( BankAccountModel item );

    [OperationContract]
    BankAccountModel Update( BankAccountModel item  );

    [OperationContract]
    void Delete(string ID); 

    //... interface of other methods
}

这是服务合同。公开此内容,描述如何使用您的服务,但没有业务逻辑。 然后创建一个接口:

的类
public class BankAccountService : IBankAccountService {
    public BankAccountModel Insert( BankAccountModel item )
    {
        // business logic for insert 
    }

    public BankAccountModel Update( BankAccountModel item  )
    {
        // business logic for update 
    }

    public void Delete(string ID)
    { 
       // business logic for delete
    }
}

这将是您的后端/业务逻辑。不要暴露这个课程。客户没有(也不允许)知道这里有什么。

要传递BankAccountModel之类的复杂对象,您必须将其定义为DataContract,并将要序列化的属性定义为DataMember。简单的例子:

[DataContract]
public class BankAccountModel {
    [DataMember]
    public string Code { get; set; }
    [DataMember]
    public string Type { get; set; }

    // ...
}

您可以阅读herehere