SilverLight中使用数据服务对数据库CRUD

SilverLight中使用数据服务对数据库CRUD

 

 

1.  建立一个数据模型

注意:模型对应的表一定要有主键,否则,建立时将不会成功。

 

2.建立一个数据服务

public class WebDataService1 : DataService<myDBEntities>

    {

        // 仅调用此方法一次以初始化涉及服务范围的策略。

        public static void InitializeService(IDataServiceConfiguration config)

        {

            // TODO: 设置规则以指明哪些实体集和服务操作是可见的、可更新的,等等。

            config.SetEntitySetAccessRule("*", EntitySetRights.All);

            config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);

        }

 

        [WebGet]

        public IQueryable<tabA> getTabA(string a)

        {

            var v = CurrentDataSource.tabA.Where(p => p.a == a);

            return v;

        }

 

        [WebInvoke]

        public IQueryable<tabX> getTabX(string x)

        {

            var v = CurrentDataSource.tabX.Where(p => p.x == x);

            return v;

        }

 

 

        [QueryInterceptor("tabX")]

        public System.Linq.Expressions.Expression<Func<tabX, bool>> query_tabX()

        {

            return p => p.z != "wwxxdd"; //为真表示允许查询

        }

 

        [ChangeInterceptor("tabX")]

        public void change_tabX(tabX en, UpdateOperations operation)

        {

            //-

            if (operation == UpdateOperations.Add)

            {

                if (string.IsNullOrEmpty(en.y))

                {

                    //如果[y]为空的处理代码

                }

            }

            //-

            if (operation == UpdateOperations.Change)

            {

 

            }

            //-

            if (operation == UpdateOperations.Delete)

            {

 

            }

        }

}

 

3.设置xaml页面

<StackPanel x:Name="spTool" >

            <data:DataGrid x:Name="dg"></data:DataGrid>

            <Button x:Name="btnRetrivebyWeb" Content="WebClient方式加载数据" Width="200" />

            <Button x:Name="btnRetriveByService" Content="DataServiceContext方式加载数据" Width="200"  />

            <Button x:Name="btnCreate" Content="添加" Width="200" />

            <Button x:Name="btnUpdate" Content="修改" Width="200" />

            <Button x:Name="btnDelete" Content="删除" Width="200"  />

        </StackPanel>

 

 

4.xaml页面对应的cs文件中添加代码

 

        public MainPage()

        {

            InitializeComponent();

            this.spTool.Loaded += new RoutedEventHandler(spTool_Loaded);

            this.btnRetrivebyWeb.Click += new RoutedEventHandler(btnRetrivebyWeb_Click);

            this.btnRetriveByService.Click += new RoutedEventHandler(btnRetriveByService_Click);

            this.btnCreate.Click += new RoutedEventHandler(btnCreate_Click);

            this.btnUpdate.Click += new RoutedEventHandler(btnUpdate_Click);

            this.btnDelete.Click += new RoutedEventHandler(btnDelete_Click);

 

        }

 

        #region WebClient方式加载数据

        private void btnRetrivebyWeb_Click(object sender, RoutedEventArgs e)

        {

            Uri uri = new Uri("http://localhost:8081/WebDataService1.svc/tabA");

            WebClient client = new WebClient();

            client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_completed);

            client.OpenReadAsync(uri);

        }

 

        void client_completed(object sender, OpenReadCompletedEventArgs e)

        {

            if (e.Error == null)

            {

                XmlReader reader = XmlReader.Create(e.Result);

                XDocument ls = XDocument.Load(reader);

 

                XNamespace xmlns = "http://www.w3.org/2005/Atom";

                XNamespace d = "http://schemas.microsoft.com/ado/2007/08/dataservices";

                XNamespace m = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";

 

                var list = from x in ls.Descendants(xmlns + "entry")

                           select new myService.tabA

                           {

                               a = x.Descendants(d + "a").First().Value,

                               b = x.Descendants(d + "b").First().Value,

                               c = x.Descendants(d + "c").First().Value

                           };

 

                dg.ItemsSource = list;

            }

        }

        #endregion

 

        //--------------------------------------------------------------------------------------

        myService.myDBEntities server;

        private void spTool_Loaded(object sender, RoutedEventArgs e)

        {

            Uri url = new Uri("http://localhost:8081/WebDataService1.svc");

            server = new myService.myDBEntities(url);

        }

 

        #region DataServiceContext方式加载数据

        private void btnRetriveByService_Click(object sender, RoutedEventArgs e)

        {

 

            Uri urlE = new Uri("http://localhost:8081/WebDataService1.svc/tabX");

            server.BeginExecute<myService.tabX>(urlE, new AsyncCallback(load_completed), null);

        }

 

        void load_completed(IAsyncResult obj)

        {

            var tp = server.EndExecute<myService.tabX>(obj);

 

            this.dg.ItemsSource = tp.ToList();

 

        }

        #endregion

 

        void saveChanges_completed(IAsyncResult obj)

        {

            if (obj.IsCompleted)

            {

                //新增后,立即调用btnRetriveByService_Click,会出错。

                btnRetriveByService_Click(null, new RoutedEventArgs());

            }

        }

 

        #region 添加数据并保存

 

        private void btnCreate_Click(object sender, RoutedEventArgs e)

        {

 

            server.AddTotabX(new myService.tabX() { x = "007", z = "sss", y = "sss" });

 

            server.BeginSaveChanges(new AsyncCallback(saveChanges_completed), null);

        }

        #endregion

 

        #region 修改数据并保存

 

        private void btnUpdate_Click(object sender, RoutedEventArgs e)

        {

            Uri urlE = new Uri("http://localhost:8081/WebDataService1.svc/tabX");

            server.BeginExecute<myService.tabX>(urlE, new AsyncCallback(begin_edit), null);

 

        }

        void begin_edit(IAsyncResult obj)

        {

            var tp = server.EndExecute<myService.tabX>(obj).Where(p => p.x == "007").First();

            tp.y = "hello";

            server.UpdateObject(tp);

            server.BeginSaveChanges(new AsyncCallback(saveChanges_completed), null);

 

        }

        #endregion

 

        #region 删除数据并保存

        private void btnDelete_Click(object sender, RoutedEventArgs e)

        {

            Uri urlE = new Uri("http://localhost:8081/WebDataService1.svc/tabX");

            server.BeginExecute<myService.tabX>(urlE, new AsyncCallback(begin_del), null);

        }

 

        void begin_del(IAsyncResult obj)

        {

            var tp = server.EndExecute<myService.tabX>(obj).Where(p => p.x == "007").First();

            server.DeleteObject(tp);

            server.BeginSaveChanges(new AsyncCallback(saveChanges_completed), null);

 

        }

        #endregion

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值