问题
你有一个通过WCF获取的对象,你想把它删除掉
解决方案
你有如下的模型
我们的模型代表了发票Invoice上的付款Payment。在我们的应用程序中,我们实现了一个WCF服务处理来自客户端的数据库交互。在我们的情况下,我们要使用服务删除一个支付对象实体。
保持尽可能简单的解决方案,我们将建立一个WCF服务库并定义模型里面按照以下步骤:
1、新建WCF服务库程序,命名Recipe5
2、右键单击recipe5项目,并选择“添加新项。选择数据➤ADO.NET实体数据模型。使用向导添加一个模型包含发票和付款表。为了简单起见,我们已经删除了发票实体上的付款导航属性。(右键单击实体框架设计器中的发票实体中的付款导航属性,并单击“删除”。)右键单击支付实体中的时间戳属性,选择属性,并设置它的并发模式来固定。这样做将从事并发控制中的时间戳属性,发送值作为在随后的WHERE子句的SQL UPDATE和DELETE操作。
3、更改Iservice.cs文件,如下所示:
[ServiceContract] public interface IService1 { [OperationContract] Payment InsertPayment(); [OperationContract] void DeletePayment(Payment payment); }
4、修改Servics.cs文件如下所示:
public class Service1 : IService1 { public void DeletePayment(Payment payment) { using (var context = new School5Entities()) { context.Entry(payment).State = EntityState.Deleted; context.SaveChanges(); } } public Payment InsertPayment() { using (var context = new School5Entities()) { // delete the previous test data context.Database.ExecuteSqlCommand("delete from Payment"); context.Database.ExecuteSqlCommand("delete from Invoice"); var payment = new Payment { Amount = 99.95M, Invoice = new Invoice { Description = "Auto Repair" } }; context.Payments.Add(payment); context.SaveChanges(); return payment; } } }
5、为了测试我们的服务,在解决方案中添加一个新的控制台应用程序项目作为我们的客户端,。通过右键单击客户端项目为客户端添加服务引用,并选择“添加服务引用”。你可能需要用鼠标右键单击服务项目并选择“调试➤启动实例之前,您可以添加在客户服务参考启动您的服务的实例。
class Program { static void Main(string[] args) { var client = new Service1Client(); var payment = client.InsertPayment(); client.DeletePayment(payment); } }