zoukankan      html  css  js  c++  java
  • XMLDatabase项目已经发布到nuget gallery

    如果你在使用Visual Studio 2010,你应该了解nuget。如果你还是不了解,可以参考下面这些介绍

    http://zzk.cnblogs.com/s?w=nuget

    今天介绍一下,之前我开发过的一个开源数据库项目(XMLDatabase)也已经发布到了unget gallery,有兴趣的朋友可以在项目中使用

    该项目的永久位置在:http://xmldatabase.codeplex.com/

    该项目的文档和范例程序在:http://xmldatabase.codeplex.com/releases/view/32227

    以前在我的博客中也讨论过这个项目

    回过去看这些文字,一晃又是两年快要过去了啊,虽然又是感慨时间是过得真快。呵呵

    这个项目上次发布之后,我在一些项目中用过,还没有大面积使用。源代码也没有太太改动,之前有些朋友跟我联系过,期间也修正了一些小的bug。以后看情况也可能会继续做些升级。例如支持Silverlight等。(目前还没有时间表)

    如果有兴趣的朋友,也可以研究一下代码,我也欢迎大家提出一些建设性的建议和想法。

    如何在你的项目中使用它呢?你需要确保你安装好了nuget这个插件。如果你还没有下载,请访问官方站点 http://www.nuget.org/

    如果安装好了,则可以在项目中,选择“References”,右键,然后选择”Manag NuGet Packages…”

    image

    然后在接下来的这个对话框中,输入xmldatabase进行搜索,就可以找到这个package

    image

    点击“install”按钮,会有一个License Acceptance的对话框。该开源项目使用的协议是:Microsoft Public License (Ms-PL)

    image

    点击“I Accept”,就可以完成安装

    image

    完成安装之后,会自动添加好dll引用,而且会有一个readme文件,帮助大家更好地了解这个开源项目

    image

    【备注】目前只支持.NET Framework 3.5和.NET Framework 4.0

    然后,你可以参考下面范例代码进行数据库的操作

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    #region 添加两个命名空间
    using XmlDatabase.Core;
    using DataEntities;
    #endregion
    
    namespace SampleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                //这个程序演示了XmlDatabase的简单使用方式.注意,目前的版本是alpha,后续可能还会有所更改
    
    
                //第一步:创建或者打开一个数据库
                using (XDatabase db = XDatabase.Open("Test"))
                {
                    //如果要重定向日志输出,请使用下面的语法即可
                    db.Log = Console.Out;
    
    
                    #region //第二步:创建几个数据实体类型.
                    //值得说明一下,这些数据实体类型没有任何特殊的要求,不需要添加任何的Attribute。但最好是遵守以下的两条简单的规则
                    //1.属性都是可读可写的,都是Public的
                    //2.重写ToString方法,这是为了让引擎在做日志记录的时候用的
    
                    Customer customer = new Customer()
                    {
                        CustomerID = "ALFKI",
                        CompanyName = "Alfreds Futterkiste",
                        Country = "Germany",
                        Region = "BC",
                        City = "Berlin",
                        ContactName = "Maria Anders",
                        Address = "Obere Str. 57"
                    };
    
                    Employee employee = new Employee()
                    {
                        EmployeeId = 1,
                        FirstName = "Nancy",
                        LastName = "Davolio",
                        Title = "Sales Representative"
                    };
    
    
                    Product product = new Product()
                    {
                        ProductId = 1,
                        ProductName = "Chai"
                    };
                    
                    Order Order = new Order()
                    {
                        OrderID = 10248,
                        OrderDate = DateTime.Now,
                        Customer = customer,
                        Employee = employee,
                        OrderItems = new List<OrderItem>()
                        {
                            new OrderItem(){
                                Product=product,
                                UnitPrice=20.5m,
                                Quantity=3
                            },
                            new OrderItem(){
                                Product=new Product(){ 
                                    ProductId=2, 
                                    ProductName="Grandma's Boysenberry Spread"},
                                UnitPrice=333,
                                Quantity=1
                            }
                        }
                    };
    
                    #endregion
    
    
                    //第三步:插入对象
                    db.Store(Order);//只要调用该方法就可以了。默认情况下,这是立即生效的
    
                    Customer c = new Customer() { CustomerID = "ABCD" };
                    db.Store(c);
                    var cs = db.Query<Customer>().First();
                    Console.WriteLine(cs);
    
                    
                    //第四步:读取对象 (这里还可以做任何的LINQ查询操作)
                    var query = from o in db.Query<Order>()
                                where o.OrderID==10248
                                select o;
                    Order firstOrder = query.First();
                    Console.WriteLine("{0},总金额为:{1}", firstOrder, firstOrder.OrderItems.Sum(i => i.Quantity * i.UnitPrice));
    
    
                    //第五步:更新对象
                    firstOrder.OrderID = 10249;//假设我们修改一下订单编号
                    //你还可以对该对象做任何的修改,例如增加一个订单记录
                    firstOrder.OrderItems.Add(new OrderItem()
                    {
                        Product = new Product() { ProductId = 3, ProductName = "Mishi Kobe Niku" },
                        UnitPrice = 10000,
                        Quantity = 1
                    });
    
                    db.Store(firstOrder);//更新的语法与刚才插入的时候是一模一样的,内部会判断出来到底是更新还是新增
                    Console.WriteLine("{0},总金额为:{1}", firstOrder, firstOrder.OrderItems.Sum(i => i.Quantity * i.UnitPrice));
    
    
                    //第六步:删除对象
                    db.Delete(firstOrder);
    
                    //第七步:批处理(上面的操作都是立即生效的,如果操作数不多的话,很简单也很直接,但因为每次都涉及到数据文件的读写,如果我们有一个循环,要批量做一些事情,则可能会有性能方面的问题,所以下面提供了批处理模式)
    
                    //首先得将数据库的模式切换到批处理模式
                    db.AutoSubmitMode = false;
                    for (int i = 0; i < 10; i++)
                    {
                        Order temp = new Order()
                        {
                            OrderID = 10248,
                            OrderDate = DateTime.Now,
                            Customer = customer,
                            Employee = employee,
                            OrderItems = new List<OrderItem>()
                        {
                            new OrderItem(){
                                Product=product,
                                UnitPrice=20.5m,
                                Quantity=3
                            },
                            new OrderItem(){
                                Product=new Product(){ 
                                    ProductId=2, 
                                    ProductName="Grandma's Boysenberry Spread"},
                                UnitPrice=333,
                                Quantity=1
                            }
                        }
                        };
    
                        db.Store(temp);//语法还是一模一样的
                    }
    
                    //区别在于,如果是批处理模式,则必须明确地调用SubmitChanges才生效
                    XSubmitStatus status = db.SubmitChanges();
                    //这个SubmitChanges方法默认情况下,如果遇到某个操作出错,那么后面的操作就不会进行了。
                    //如果希望出错后继续,那么应该使用下面的语法
                    //XSubmitStatus status=db.SubmitChanges(true);
    
                    //第八步:事务性操作
                    //要进行事务性操作,必须处于批处理模式中。我最后将它做了简化,调用下面的方法即可
                    //XSubmitStatus status = db.SubmitChangesWithTransaction();
    
    
                    //第九步:关闭数据库
                    db.Close();
                }
    
                Console.Read();
                //后续任务
            }
        }
    }
    

    希望这样可以更加方便大家使用这个组件。如果有什么反馈建议,请给我留言或者邮件。

    最后,很多朋友可能都感兴趣,我自己如何发布Package呢?其实不难,请参考下面的两个链接

    Creating and Publishing a Package

    http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package

    Using A GUI (Package Explorer) to build packages

    http://docs.nuget.org/docs/creating-packages/using-a-gui-to-build-packages#Creating_a_Package

  • 相关阅读:
    Git SSH Key 生成步骤
    IOS音频1:之采用四种方式播放音频文件(一)AudioToolbox AVFoundation OpenAL AUDIO QUEUE
    IOS网络篇1之截取本地URL请求(NSURLProtocol)
    IOS 视频直播/智能家居(一行行敲代码,从零开始)lesson:1整体架构
    iOS应用支持IPV6,就那点事儿
    App store最新审核标准公布
    iOS应用内付费(IAP)开发步骤列表
    iOS应用内支付(IAP)的那些坑
    IOS 第三方支付的使用:支付宝
    亲们,委托你们是否已忘记
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/2090180.html
Copyright © 2011-2022 走看看