Beginner:How to use Entity Framework? SOS!
Senior men:Try using the SOD Framework!

菜鸟:怎么使用EF框架啊?遇到麻烦了,救命!
老鸟:试试SOD开发框架!

Still using EF and get stuck? Why not release yourself and try SOD!
It is easy, and simple.

一直使用EF并且老是遇到麻烦?何不解放自己并且试试SOD框架呢!
它是简单的,并且容易使用的,轻量级的框架。

SOD not only a ORM framework,include SQL-MAP,DataControls,detai ,but it is a light weight framework . see this page.

SOD 不仅仅是一个ORM框架,还包括 SQL-MAP,DataControls,但它却是一个非常轻量级的框架。了解更多,看这里。


Learning more,see this page.

要了解更多,请看这篇文章


下面一个简单的SOD框架ORM使用的实例:
在开始工作之前,先建立一个控制台项目,然后在程序包管理控制台,添加SOD框架的Nuget 包:
Install-Package PDF.NET 

这样即可获取到最新的SOD框架包并且添加引用,然后,就可以开始下面的工作了。
已经建立好的当前Demo程序下载,看这里
  • 1,首先建立一个实体类:
   public  class User : EntityBase 
   { 
       public User() 
       { 
           TableName = "Tb_User"; 
           IdentityName = "UserID"; 
           PrimaryKeys.Add("UserID"); 
      } 
  
       public  int ID 
       { 
           get { return getProperty<int>("UserID"); } 
           set { setProperty("UserID", value); } 
       } 
  
       public  string Name 
       { 
           get { return getProperty<string>("Name"); } 
           set { setProperty("Name", value, 50); } 
       } 
  
       public  string Pwd 
       { 
           get { return getProperty<string>("Pwd"); } 
           set { setProperty("Pwd", value, 50); } 
       } 
    } 
  • 2,然后建立一个 DbContext:
  class  LocalDbContext:DbContext 
   { 
       public LocalDbContext() 
           : base("local") 
       { 
           //local 是连接字符串名字 
       } 
  
       protected  override bool CheckAllTableExists() 
       { 
           //创建用户表 
           CheckTableExists<User>(); 
           return  true; 
       } 
   }
 
  • 3,修改下App.config 文件的连接配置:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<connectionStrings> 
   <add name="local" connectionString="Data Source=.;database=TestDB; Integrated Security=True" providerName="SqlServer"/> 
</connectionStrings> 
</configuration> 
providerName 是SOD框架提供的驱动程序,可选的内容有:
  1. Access
  2. SqlServer
  3. Oracle
  4. SqlCe
  5. OleDb
  6. Odbc

如果是其它的扩展程序集,那么providerName应该写成下面的形式:
    providerName="PWMIS.DataProvider.Data.OracleDataAccess.Oracle,PWMIS.OracleClient"

其中,“,”号前是驱动程序类型的全名称, “,”号后是驱动程序所在的程序集名称,要求该程序集必须放到 跟PWMIS.Core.dll 同一个目录下,且是同一个兼容版本。
有关数据库连接配置的详细内容,请参考:2.2.3 扩展数据访问类配置
  • 4,然后,像下面这样使用,即可自动创建数据库和表,并且添加一条初始数据:
           //创建数据库和表
           LocalDbContext context=new  LocalDbContext();
          //重新指定主键,删除旧的测试数据 
           User oldUser = new  User(); 
           oldUser.PrimaryKeys.Clear(); 
           oldUser.PrimaryKeys.Add("Name"); 
           oldUser["Name"] = "zhang san"; //索引器使用 
           int count= context.Remove<User>(oldUser); 
  
           User zhang_san = new  User() { Name = "zhang san", Pwd = "123" }; 
           count = context.Add<User>(zhang_san);//采用 DbContext 方式插入数据 
  

当然插入数据的方式很多,具体请看本文提供的源码下载。
  • 5,最后,像下面这样使用查询即可:

 
           User user = new  User() { Name = "zhang san" }; 
           OQL q = OQL.From(user) 
             .Select() 
             .Where(user.Name) 
           .END; 
  
           PrintOQL(q); 
           List<User> users = EntityQuery<User>.QueryList(q); 


这种方式适合简单的相等条件查询,如果需要复杂的条件,可以修改成下面这个样子:


           //示例:采用操作符重载写比较条件 
           User user = new  User(); 
           OQL q = OQL.From(user) 
                         .Select() 
                         .Where(cmp => cmp.Property(user.Name) == "zhang san") 
                       .END; 
         PrintOQL(q); 
           //使用扩展方法 using PWMIS.Core.Extensions; 
           List<User> users = q.ToList<User>();


示例代码中的 可以修改成 >,<,like 等SQL支持的比较符号。
如果需要更多条件,可以使用 &表示SQL的AND,| 表示 SQL的OR 逻辑关系,比如:


           //示例:采用操作符重载写比较条件 
           User user = new  User(); 
           OQL q = OQL.From(user) 
                         .Select() 
                         .Where(cmp => cmp.Property(user.Name) == "zhang san" 
                         & cmp.Comparer(user.Pwd ,"=","123") ) 
                       .END; 
         PrintOQL(q); 
           //使用扩展方法 using PWMIS.Core.Extensions; 
           List<User> users = q.ToList<User>(); 


实际上,框架提供了至少6种查询方式,详细内容,请看Demo程序下载,看这里

附注:


       private static void PrintOQL(OQL q)
       { 
           Console.WriteLine("OQL to SQL:\r\n{0}", q.ToString()); 
           Console.WriteLine("SQL Parameters:\r\n{0}", q.PrintParameterInfo()); 
       } 


该方法可以打印OQL的SQL和参数信息,为你调试代码带来方便。


这样,一个简单的ORM使用实例就做好了。上面这段ORM例子,不仅仅适用于Oracle,使用在其它数据库都是可以得,只需要修改 连接字符串配置的 providerName和 connectionString 即可。

详细可以参考 Oracle 免费的数据库--Database 快捷版 11g 安装使用与"SOD框架"对Oracle的CodeFirst支持


Last edited Dec 10, 2015 at 3:19 PM by dth, version 70