开发者社区> 技术小胖子> 正文

上接精进不休 .NET 4.0 (8) - ADO.NET Entity Framework 4.0 Self Tracking Entity

简介:
+关注继续查看
2、WCF 结合 Self Tracking Entity 的 Demo
服务端:NTierServer/IMyService.cs
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.Text; 

namespace NTierServer 

        [ServiceContract] 
        public interface IMyService 
        { 
                [OperationContract] 
                List<ProductCategory> GetCategories(); 

                [OperationContract] 
                ProductCategory GetCategory(int categoryId); 

                [OperationContract] 
                int UpdateCategory(ProductCategory category); 

                [OperationContract] 
                int AddCategory(ProductCategory category); 

                [OperationContract] 
                int DeleteCategory(int categoryId); 
        } 
}
 
服务端:NTierServer/MyService.cs
/* 
* ADO.NET Entity Framework 4.0 - WCF 结合 Self Tracking Entity 的应用 
*         1、通过 WCF 使用 Self Tracking Entity 不需手动调用 StartTracking() 
*         2、先 MarkAsAdded(), MarkAsModified(), MarkAsDeleted() 再 ApplyChanges() ; 或者 先 ApplyChanges() 再 ChangeObjectState(), ChangeRelationshipState() 
*    
* 本 Demo 演示如何通过 WCF 结合 Self Tracking Entity 来实现对单表的增删改查 
*/ 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.Text; 
using System.Data; 

namespace NTierServer 

        public class MyService : IMyService 
        { 
                // 取全部产品类别的实体集合 
List<ProductCategory> GetCategories() List<ProductCategory> GetCategories() 
                { 
                        using (var ctx = new AdventureWorksEntities()) 
                        { 
                                var result = ctx.ProductCategories.ToList(); 
                                return result; 
                        } 
                } 

                // 根据 id 取产品类别实体 
ProductCategory GetCategory() ProductCategory GetCategory(int categoryId) 
                { 
                        using (var ctx = new AdventureWorksEntities()) 
                        { 
                                var result = ctx.ProductCategories.Single(c => c.ProductCategoryID == categoryId); 
                                return result; 
                        } 
                } 

                // 根据产品类别实体更新数据库中的相关数据 
int UpdateCategory() int UpdateCategory(ProductCategory category) 
                { 
                        using (var ctx = new AdventureWorksEntities()) 
                        { 
                                // 先 ApplyChanges() 再 ChangeObjectState(), ChangeRelationshipState() 
                                ctx.ProductCategories.ApplyChanges(category); 
                                ctx.ObjectStateManager.ChangeObjectState(category, EntityState.Modified); 

                                return ctx.SaveChanges(); 
                        } 
                } 

                // 根据产品类别实体向数据库添加新的数据 
int AddCategory() int AddCategory(ProductCategory category) 
                { 
                        using (var ctx = new AdventureWorksEntities()) 
                        { 
                                ctx.ProductCategories.ApplyChanges(category); 
                                return ctx.SaveChanges(); 
                        } 
                } 

                // 根据 id 删除数据库中的相关数据 
int DeleteCategory() int DeleteCategory(int categoryId) 
                { 
                        using (var ctx = new AdventureWorksEntities()) 
                        { 
                                var category = GetCategory(categoryId); 

                                // 先 MarkAsAdded(), MarkAsModified(), MarkAsDeleted() 再 ApplyChanges() 
                                category.MarkAsDeleted(); 
                                ctx.ProductCategories.ApplyChanges(category); 

                                return ctx.SaveChanges(); 
                        } 
                } 
        } 
}
 
服务端:NTierServer/Web.config
<system.serviceModel> 
        <behaviors> 
                <serviceBehaviors> 
                        <behavior name=""> 
                                <serviceMetadata httpGetEnabled="true" /> 
                                <serviceDebug includeExceptionDetailInFaults="true" /> 
                        </behavior> 
                </serviceBehaviors> 
        </behaviors> 
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
</system.serviceModel>
 
客户端:NTierClient/Web.config
<system.serviceModel> 
        <bindings> 
                <basicHttpBinding> 
                        <binding name="BasicHttpBinding_IMyService" closeTimeout="00:01:00" 
                                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
                                allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
                                maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
                                messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
                                useDefaultWebProxy="true"
                                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
                                        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
                                <security mode="None"
                                        <transport clientCredentialType="None" proxyCredentialType="None" 
                                                realm="" /> 
                                        <message clientCredentialType="UserName" algorithmSuite="Default" /> 
                                </security> 
                        </binding> 
                </basicHttpBinding> 
        </bindings> 
        <client> 
                <endpoint address="http://localhost:10394/MyService.svc" binding="basicHttpBinding" 
                        bindingConfiguration="BasicHttpBinding_IMyService" contract="MyServiceReference.IMyService" 
                        name="BasicHttpBinding_IMyService" /> 
        </client> 
</system.serviceModel>
 
客户端:NTierClient/Demo.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Demo.aspx.cs" Inherits="NTierClient.Demo" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
<html xmlns="http://www.w3.org/1999/xhtml"
<head runat="server"
        <title></title> 
</head> 
<body> 
        <form id="form1" runat="server"
        <div> 
                <asp:ListView ID="ListView1" runat="server" DataKeyNames="ProductCategoryID" InsertItemPosition="LastItem" 
                        OnItemDeleting="ListView1_ItemDeleting" OnItemInserting="ListView1_ItemInserting" 
                        OnItemUpdating="ListView1_ItemUpdating" OnItemCanceling="ListView1_ItemCanceling" 
                        OnItemEditing="ListView1_ItemEditing"
                        <EditItemTemplate> 
                                <tr style=""> 
                                        <td> 
                                                <asp:Button ID="UpdateButton" runat="server" CommandName="Update" Text="Update" /> 
                                                <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="Cancel" /> 
                                        </td> 
                                        <td> 
                                                  
                                        </td> 
                                        <td> 
                                                  
                                        </td> 
                                        <td> 
                                                <asp:TextBox ID="NameTextBox" runat="server" Text='<%# Bind("Name") %>' /> 
                                        </td> 
                                        <td> 
                                                  
                                        </td> 
                                        <td> 
                                                  
                                        </td> 
                                </tr> 
                        </EditItemTemplate> 
                        <InsertItemTemplate> 
                                <tr style=""> 
                                        <td> 
                                                <asp:Button ID="InsertButton" runat="server" CommandName="Insert" Text="Insert" /> 
                                                <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="Clear" /> 
                                        </td> 
                                        <td> 
                                                  
                                        </td> 
                                        <td> 
                                                  
                                        </td> 
                                        <td> 
                                                <asp:TextBox ID="NameTextBox" runat="server" Text='<%# Bind("Name") %>' /> 
                                        </td> 
                                        <td> 
                                                  
                                        </td> 
                                        <td> 
                                                  
                                        </td> 
                                </tr> 
                        </InsertItemTemplate> 
                        <ItemTemplate> 
                                <tr style=""> 
                                        <td> 
                                                <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="Delete" /> 
                                                <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="Edit" /> 
                                        </td> 
                                        <td> 
                                                <asp:Label ID="ProductCategoryIDLabel" runat="server" Text='<%# Eval("ProductCategoryID") %>' /> 
                                        </td> 
                                        <td> 
                                                <asp:Label ID="ParentProductCategoryIDLabel" runat="server" Text='<%# Eval("ParentProductCategoryID") %>' /> 
                                        </td> 
                                        <td> 
                                                <asp:Label ID="NameLabel" runat="server" Text='<%# Eval("Name") %>' /> 
                                        </td> 
                                        <td> 
                                                <asp:Label ID="rowguidLabel" runat="server" Text='<%# Eval("rowguid") %>' /> 
                                        </td> 
                                        <td> 
                                                <asp:Label ID="ModifiedDateLabel" runat="server" Text='<%# Eval("ModifiedDate") %>' /> 
                                        </td> 
                                </tr> 
                        </ItemTemplate> 
                        <LayoutTemplate> 
                                <table id="itemPlaceholderContainer" runat="server" border="0" style=""> 
                                        <tr runat="server" style=""> 
                                                <th runat="server"
                                                </th> 
                                                <th runat="server"
                                                        ProductCategoryID 
                                                </th> 
                                                <th runat="server"
                                                        ParentProductCategoryID 
                                                </th> 
                                                <th runat="server"
                                                        Name 
                                                </th> 
                                                <th runat="server"
                                                        rowguid 
                                                </th> 
                                                <th runat="server"
                                                        ModifiedDate 
                                                </th> 
                                        </tr> 
                                        <tr id="itemPlaceholder" runat="server"
                                        </tr> 
                                </table> 
                        </LayoutTemplate> 
                </asp:ListView> 
        </div> 
        </form> 
</body> 
</html>
 
客户端:NTierClient/Demo.aspx.cs
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

using System.ServiceModel; 

namespace NTierClient 

        public partial class Demo : System.Web.UI.Page 
        { 
void Page_Load() void Page_Load(object sender, EventArgs e) 
                { 
                        if (!Page.IsPostBack) 
                        { 
                                BindData(); 
                        } 
                } 

void BindData() void BindData() 
                { 
                        var svc = new ChannelFactory<MyServiceReference.IMyService>("BasicHttpBinding_IMyService").CreateChannel(); 

                        var categories = svc.GetCategories(); 
                        ListView1.DataSource = categories; 
                        ListView1.DataBind(); 
                } 

void ListView1_ItemUpdating() void ListView1_ItemUpdating(object sender, ListViewUpdateEventArgs e) 
                { 
                        var svc = new MyServiceReference.MyServiceClient(); 
                        var category = svc.GetCategory((int)ListView1.DataKeys[e.ItemIndex].Value); 

                        category.Name = (string)e.NewValues["Name"]; 

                        svc.UpdateCategory(category); 

                        ListView1.EditIndex = -1; 
                        BindData(); 
                } 

void ListView1_ItemInserting() void ListView1_ItemInserting(object sender, ListViewInsertEventArgs e) 
                { 
                        var category = new MyServiceReference.ProductCategory(); 
                        category.Name = (string)e.Values["Name"]; 
                        category.rowguid = Guid.NewGuid(); 
                        category.ModifiedDate = DateTime.Now; 

                        var svc = new MyServiceReference.MyServiceClient(); 
                        svc.AddCategory(category); 

                        BindData(); 
                } 

void ListView1_ItemDeleting() void ListView1_ItemDeleting(object sender, ListViewDeleteEventArgs e) 
                { 
                        var svc = new MyServiceReference.MyServiceClient(); 
                        svc.DeleteCategory((int)ListView1.DataKeys[e.ItemIndex].Value); 

                        BindData(); 
                } 

void ListView1_ItemCanceling() void ListView1_ItemCanceling(object sender, ListViewCancelEventArgs e) 
                { 
                        ListView1.EditIndex = -1; 
                        BindData(); 
                } 

void ListView1_ItemEditing() void ListView1_ItemEditing(object sender, ListViewEditEventArgs e) 
                { 
                        ListView1.EditIndex = e.NewEditIndex; 
                        BindData(); 
                } 
        } 
}
 
 


     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/341388,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载