有关SubSonic的新消息
2008-02-10 19:37 无常 阅读(11783) 评论(27) 编辑 收藏 举报不知园子里有多少人在使用SubSonic,去年7月份开始接触SubSonic,随即在刚启动的新项目中启用,放弃了原计划使用iBATIS.NET 的方案。不是说iBATIS.NET 不好,而是我觉得SubSonic比iBATIS.NET在更胜任短平快的WEB应用,SubSonic比iBATIS.NET省去了一大堆的映射配置文件,在数据库变更时,也无需再去维护烦琐的配置,那个叫省心呀~~~
SubSonic的发起人Rob Conery已经加入了MS ASP.NET team,但他仍然继续着SubSonic的开发,在这个POST中表明"SubSonic is NOT dead"。未来的版本会跟着DotNet的步伐,计划中的3.0版本将向Linq靠拢,这也意味着3.0版本开始只能在DotNet3.5或以上版本的框架中使用了。在此之前,SubSonic还会有一个过渡性的2.1版本,也是最后一个基于DotNet2.0的版本。
现在已经可以在CodePlex上下载SubSonic2.1 Beta版了,这个安装包块头也大了不小(18M)。在安装目录中,发现比2.0版本多了个SubStage程序。
SubStage是SubCommander的GUI版本,在这里可以使用直观的设置来创建SubSonic的配置文件、生成代码等。
我们来看一下2.1版本中查询方法的一些变化:
单表
Northwind.ProductCollection products = |
Northwind.DB.Select().From("Products") |
.Where("categoryID").IsEqualTo(5) |
.And("productid").IsGreaterThan(50) |
.ExecuteAsCollection<Northwind.ProductCollection>(); |
生成的SQL:
SELECT [dbo].[Products].[ProductID], [dbo].[Products].[ProductName], [dbo].[Products].[SupplierID], [dbo].[Products].[CategoryID], [dbo].[Products].[QuantityPerUnit], [dbo].[Products].[UnitPrice], [dbo].[Products].[UnitsInStock], [dbo].[Products].[UnitsOnOrder], [dbo].[Products].[ReorderLevel], [dbo].[Products].[Discontinued] |
FROM [dbo].[Products] |
WHERE [dbo].[Products].[CategoryID] = @CategoryID |
AND [dbo].[Products].[ProductID] > @ProductID |
join
Northwind.CustomerCollection customersByCategory = new Select() |
.From(Northwind.Customer.Schema) |
.InnerJoin(Northwind.Order.Schema) |
.InnerJoin(Northwind.OrderDetail.OrderIDColumn, Northwind.Order.OrderIDColumn) |
.InnerJoin(Northwind.Product.ProductIDColumn, Northwind.OrderDetail.ProductIDColumn) |
.Where("CategoryID").IsEqualTo(5) |
.ExecuteAsCollection<Northwind.CustomerCollection>(); |
生成的SQL:
SELECT [dbo].[Customers].[CustomerID], [dbo].[Customers].[CompanyName], [dbo].[Customers].[ContactName], [dbo].[Customers].[ContactTitle], [dbo].[Customers].[Address], [dbo].[Customers].[City], [dbo].[Customers].[Region], [dbo].[Customers].[PostalCode], [dbo].[Customers].[Country], [dbo].[Customers].[Phone], [dbo].[Customers].[Fax] |
FROM [dbo].[Customers] |
INNER JOIN [dbo].[Orders] ON [dbo].[Customers].[CustomerID] = [dbo].[Orders].[CustomerID] |
INNER JOIN [dbo].[Order Details] ON [dbo].[Orders].[OrderID] = [dbo].[Order Details].[OrderID] |
INNER JOIN [dbo].[Products] ON [dbo].[Order Details].[ProductID] = [dbo].[Products].[ProductID] |
WHERE CategoryID = @CategoryID |
此版本已经支持各种join查询(Inner, Outer, Right/Left Inner/Outer, Cross, Unequal),相对于2.0版本来说,这是个很大的改进。
IN
SqlQuery q = new Select("productid", "productname", "unitprice", "SupplierID") |
.From("Products").Where("CategoryID").In( |
new Select("CategoryID").From("Categoryies").WhereExpression("CategoryName").Like("A%")); |
生成的SQL语句:
分页:
List<Product> = new Select("productid", "productname", "unitprice", "SupplierID") |
.From("Products").Paged(2,10).ExecuteTypedList<Product>(); |
如果是sqlserver2005数据库,就是用ROW_NUMBER()来分页,生成的SQL语句是这样的:
怎样,新的查询语法感觉是不是和Linq很相似。
事务
List<Insert> queries = new List<Insert>(); |
queries.Add(new Insert().Into(Northwind.Region.Schema).Values("test1")); |
queries.Add(new Insert().Into(Northwind.Region.Schema).Values("test2")); |
queries.Add(new Insert().Into(Northwind.Region.Schema).Values("test3")); |
queries.Add(new Insert().Into(Northwind.Region.Schema).Values("test4")); |
queries.Add(new Insert().Into(Northwind.Region.Schema).Values("test5")); |
queries.Add(new Insert().Into(Northwind.Region.Schema).Values("test6")); |
queries.Add(new Insert().Into(Northwind.Region.Schema).Values("test7")); |
//execute in a transaction |
SqlQuery.ExecuteTransaction(queries); |
减少对ActiveRecord的依赖
SubSonic以住版本中,BO必须2从ActiveRecord继承。在2.1版本中,BO可以从ActiveRecord继承,也可以从其他任意类继承,例如这样:
class TestProduct { |
private int _id; |
public int ProductID { |
get { return _id; } |
set { _id = value; } |
} |
private string _name; |
public string ProductName { |
get { return _name; } |
set { _name = value; } |
} |
private decimal _price; |
public decimal UnitPrice { |
get { return _price; } |
set { _price = value; } |
} |
} |
然后在查询语句中这样使用这个类:
List<TestProduct> result = new |
Select("productid","productname","unitprice") |
.From(Northwind.Product.Schema) |
.ExecuteTypedList<TestProduct>(); |
如果想修改自动生成的BO继承关系,只需修改配置文件中的tableBaseClass值:
<add name="NorthwindRepository" type="SubSonic.SqlDataProvider, SubSonic" |
connectionStringName="Northwind" |
generatedNamespace="NorthwindRepository" |
tableBaseClass="MyBaseObject"/> |
期待正式版发布,感觉Rob Conery为我等懒人所做的一切。
出处: http://wuchang.cnblogs.com
相关链接:
http://blog.wekeroad.com/2008/01/10/subsonic-version-21-pakala-preview-the-new-query-tool/
http://blog.wekeroad.com/2008/01/16/subsonic-21-pakala-preview-part-2/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架