您的位置:首页 > 数据库

Linq to sql(十):分层构架的例子(二)

2010-06-01 12:43 393 查看
编写数据访问服务

首先我们可以定义出留言簿数据访问服务的契约(接口),把如下的代码保存为IDataAccess.cs放在Contract类库项目中:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.ServiceModel;

namespace Contract

{

[ServiceContract]

public interface IDataAccess

{

[OperationContract]

void SendMessage(TbGuestBook gb);

[OperationContract]

List<TbGuestBook> GetData();

[OperationContract]

void DeleteMessage(string ID);

[OperationContract]

void SendReply(TbGuestBook gb);

}

}

在这里定义了四个方法:

l 创建留言

l 获取所有留言

l 删除留言

l 管理员发表回复

然后,我们来实现这个契约,把如下代码保存为DataAccess.cs放在Service类库项目中:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Contract;

using System.Data.Linq.Mapping;

using System.IO;

using System.ServiceModel;

namespace Service

{

[ServiceBehavior(IncludeExceptionDetailInFaults = true)]

public class DataAccess : IDataAccess

{

GuestBook ctx;

public DataAccess()

{

XmlMappingSource xms = XmlMappingSource.FromXml(File.ReadAllText("c:\\guestbook.map"));

ctx = new GuestBook("server=srv-devdbhost;database=GuestBook;uid=sa;pwd=Abcd1234", xms);

ctx.Log = Console.Out;

}

public void SendMessage(TbGuestBook gb)

{

ctx.TbGuestBook.Add(gb);

ctx.SubmitChanges();

}

public List<TbGuestBook> GetData()

{

var query = from gb in ctx.TbGuestBook orderby gb.PostTime descending select gb;

return query.ToList();

}

public void DeleteMessage(string ID)

{

TbGuestBook gb = ctx.TbGuestBook.Single(message => message.ID == new Guid(ID));

ctx.TbGuestBook.Remove(gb);

ctx.SubmitChanges();

}

public void SendReply(TbGuestBook gb)

{

//ctx.ExecuteCommand("update tbGuestBook set reply={0},isreplied=1 where ID={1}", gb.Reply, gb.ID);

TbGuestBook record = ctx.TbGuestBook.Single(message => message.ID == gb.ID);

record.IsReplied = true;

record.Reply = gb.Reply;

ctx.SubmitChanges();

}

}

}

这里需要注意几点:

l 我们把DataContext的操作在控制台输出

l 在进行发表回复(更新操作)的时候,注释的代码和没有注释的代码虽然都能完成更新操作,但是前者更合理,因为后者会先进行SELECT再进行UPDATE

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: