subsonic mysql_Subsonic 介绍
SubSonic:一個數據層構建器(BLL)
導言
一 個易維護的應用程序,不同的類之間有不同的分工,通常分為界面層、業務層和數據訪問層。雖然這一技術有利于更好地組織應用,一些開發人員不愿這么做。創建 一個可靠的和快速的數據訪問層需要一些規劃,一旦你創建了一個,他們看起來都是相似的。SubSonic幫助你基于數據庫自動創建數據庫訪問層。
SubSonic是什么?
SubSonic是一個數據訪問構建器。他還是一個auto-magic 的對象關系映射(ORM)工具,幫助你快速建立一個網站。
像吹噓的那樣,SubSonic能做什么工作,怎么能幫助你更快的建立應用程序?SubSonic通過讀取你的數據庫的結構,并為你構建快速,靈活的數據 訪問層類。他只需要很少的配置,為你提供了不同的方法查詢和保存數據,并提供方法給你定制以適應你的開發風格。SubSonic受到Rub on Rails的ActiveRecord的啟發,不過SubSonic是一個純粹的.NET組件。
SubSonic配置
和其它的ORM比較,SubSonic需要的配置很少,最小要求是將下列配置添加到web.config(app.config)文件:
一個或者多個數據庫連接串
一個SubSonic配置節
連接適當的數據庫連接到SubSonic
就是這么簡單-沒有必要關心要那些表或配置表和對象的映射關系。在實踐中,配置看起來如下:
在Web.config的中添加下表內容,注意< configSections >元素必須是 configuration 元素的第一個子元素。其中節就是通用的連接字符串
name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic"
allowDefinition="MachineToApplication" restartOnExternalChanges="true"
requirePermission="false"/>
removeUnderscores="false" stripTableText="Global_,Account_,_tb,Form_"
stripViewText="Global_,Account_,_vw,Form_" fixPluralClassNames="false"
/>
里的參數說明:
generatedNamespace="Northwind"? 設定生成代碼命名空間,修改為你希望的命名空間;
connectionStringName="數據庫連接"? 使用數據庫的連接字符串,修改為你要使用的數據庫連接字符串;
excludeTableList="^aspnet_Applications$,^aspnet_Membership$,^aspnet_Paths$"
不生成aspnet_Applications, aspnet_Membership, aspnet_Paths這三個表相關代碼;
generateODSControllers="false" 不生成Controllers類;
removeUnderscores="false" 不移除生成對象名稱下劃線;
stripTableText="Global_,Account_,_tb,Form_" 生成表相關對象名稱開頭如果與設定值匹配則去掉;
stripViewText="Global_,Account_,_vw,Form_" 視圖名處理與與上面表處理相同;
fixPluralClassNames="false"? 不去除類名的復數s
當有多個節點時,可以用下面的方法再添加一個,注意加上這個節點
獲取數據
一旦你用SubSonic創建了數據訪問層(DAL),無論是使用代碼生成器還是BuilderProvider,你隨時可以查詢你的數據庫,目前SubSonic支持下列數據庫
微軟SQL SERVER 2000或2005,包括Express版本
Oracle
MySQL
SQLite
SubSonic為你的數據庫里的每個表生成三個類:
表名奇數形式的類:例如有一個表Products,類名就是Product,這是一個強類型的類代表數據庫表中的一行數據,表中的每一列對應類中的強類型的屬性名,允許null的字段定義為nullable
集合類:例如一個表Products,你將得到ProductCollection 類,這個類提供了好多方法處理數據庫的數據
一 個控制器(如ProductController):這提供了基本功能(創建,檢索,更新和刪除)。 而Product和ProductCollection 能裝載自己,是ProductController是專為這些任務而設計的。此外,你可以把控制器作為數據源,為您的網頁使用 ObjectDataSource控件。
Subsonic2.1使用
1.引用命名空間
如果生成代碼文件是Northwind(web.config中generatedNamespace="Northwind",如上面配置)在使用文件中引用
using Northwind;
2.插入記錄
如下代碼可在表Region中插入一條記錄
Region.Insert(10, "TestSubsonic2.1");
3.修改記錄
a.單個記錄修改,下面代碼可修改上面剛插入的記錄
Region region = new Region(10);
region.RegionDescription = "TestSubsonic_Update";
region.Save();
b.批量更新
Query q = Region.Query();
q.AddWhere(Region.Columns.RegionDescription, "test");
q.AddUpdateSetting(Region.Columns.RegionDescription, "TestSubsonic");
q.QueryType = QueryType.Update;
q.Execute();
上面代碼把所有RegionDescription值為test 的記錄修改為TestSubsonic
4.刪除記錄
a.刪除單個記錄
Region.Delete(10);
刪除主鍵值 RegionID 為10的記錄
b.批量刪除
Query q = Region.Query();
q.AddWhere(Region.Columns.RegionDescription, "test");
q.QueryType = QueryType.Delete;
q.Execute();
以上代碼刪除所有RegionDescription值等于test的記錄
5.查詢數據
Query q = Region.Query();
q.AddWhere(Region.Columns.RegionID, Comparison.GreaterOrEquals, 2);
DataTable dt = q.ExecuteDataSet().Tables[0];
以上代碼獲取Region表中RegionID >= 2 的數據表
Query q = Region.Query();
q.AddWhere(Region.Columns.RegionDescription, Comparison.Like, "te" + "%");
DataTable dt = q.ExecuteDataSet().Tables[0];
以上Like查詢,返回所有RegionDescription列值以te開頭的記錄表
6.獲取對象集合
RegionCollection coll = DB.Select().From("Region").Where("RegionId")
.IsGreaterThan(2).ExecuteAsCollection();
int id = coll[0].RegionID;
string description = coll[0].RegionDescription;
以上代碼獲取RegionId > 2 的Region對象集合coll后,就可以操作對象數據值
SubSonic基本操作
查詢
SubSonic2.1版本 – 列出3種查詢。
Product product = new Select().From().Where(Product.ProductIDColumn).IsEqualTo(4)
.ExecuteSingle();
Product product = DB.Select().From().Where("ProductID").IsEqualTo(4)
.ExecuteSingle();
Query query = new Query(Product.Schema);
query.WHERE("ProductID=4").ORDER_BY("ProductID asc");
IDataReader dr = Product.FetchByQuery(query);
DataSet product = new?? Query(Product.Schema).WHERE("ProductID=4").ORDER_BY("Prod? uctID asc")
.ExecuteDataSet();
關聯查詢
DataSet product = new Select(Product.ProductNameColumn,Category.CategoryNameColumn).From()
.InnerJoin(Category.CategoryIDColumn, Product.CategoryIDColumn)
.Where(Category.CategoryIDColumn).IsGreaterThan(4).ExecuteDataSet();
注意. InnerJoin(f2, f1) 的使用方法。
分頁查詢
List products = new Select().From()
.Where(Product.ProductIDColumn).IsEqualTo(4).Paged(1, 30).ExecuteTypedList();
查詢—返回對象
ExecuteReader();?? 返回DataReader
ExecuteScalar();?? 返回對象
ExecuteScalar();? 返回泛型對象
ExecuteSingle(); 返回表實體對象
ExecuteTypedList();? 返回泛型表實休數據集
ExecuteDataSet();? 返回DataSet
ExecuteJoinedDataSet(); 返回關聯查詢 DataSet
Execute(); 返回執行后,數據更新條數
SQL關鍵詞
IsEqualTo(obj) // 等于 value
IsBetweenAnd(obj1, obj2) // [字段1] BETWEEN 值1 AND 值2
StartsWith? // LIEK '1%‘
EndsWith??? // LIEK '%1‘
IsGreaterThan // [字段1] > 值1
IsGreaterThanOrEqualToIsGreaterThan // [字段1] >= 值1
IsLessThan // [字段1] < 值1
IsLessThanOrEqualToIsLessThan // [字段1] <= 值1
WhereExpression / AndExpression // Expression 表示括號
C#:
.Where("1").IsGreaterThan(1)
.And("2").IsGreaterThanOrEqualTo(2)
.AndExpression("3").IsLessThan(3)
.AndExpression("4").IsLessThanOrEqualTo(4).And("5").StartsWith("5")
.AndExpression("6").EndsWith("6")
.ExecuteSingle();
SQL:WHERE 1 > @1AND 2 >= @2 AND (3 < @3) AND (4 <= @4 AND 5 LIKE @5) AND (6 LIKE @6)
修改
Product product = new Product(4);
product.ProductName = "amo";
product.Save();
int i = new Update(Product.Schema)
.Set(Product.ProductNameColumn).EqualTo("Chai -- Amo")
.Where(Product.ProductIdColumn).IsEqualTo(1)
.Execute();
添加
Product product = new Product();
product.ProductName = "my xiaoli";
product.SupplierID = 1;
product.CategoryID = 1;
product.Discontinued = true;
//............
product.Save();
int i = new Insert().Into(Product.Schema,
"ProductName",
"SupplierID",
"CategoryID",
"Discontinued“
)
.Values("my amo", 1, 1, 1).Execute();
刪除
int i = new Delete ().From()
.Where(Product.ProductIDColumn). IsEqualTo(1)
.Execute();
事務1
List queries = new List();
queries.Add(new Insert().Into(Product.Schema).Values("product1"));
queries.Add(new Insert().Into(Product.Schema).Values("product2"));
queries.Add(new Insert().Into(Product.Schema).Values("product3"));
queries.Add(new Insert().Into(Product.Schema).Values("product4"));
queries.Add(new Insert().Into(Product.Schema).Values("product5"));
queries.Add(new Insert().Into(Product.Schema).Values("product6"));
queries.Add(new Insert().Into(Product.Schema).Values("product7"));
//execute in a transaction
SqlQuery.ExecuteTransaction(queries);
事務2
using (SharedDbConnectionScope sp = new SharedDbConnectionScope())
{
using (TransactionScope scope = new TransactionScope())
{
// coding....
scope.Complete();
}
}
減少對ActiveRecord的依賴
MyProduct product = new Select(
Product.ProductNameColumn,
Category.CategoryNameColumn
).From()
.InnerJoin(Category.CategoryIDColumn, Product.CategoryIDColumn)
.Where(Category.CategoryIDColumn).IsGreaterThan(4)
.ExecuteSingle();
string cname = product.CategoryName;
string pname = product.ProductName;
自定義MyProduct實體類
public class MyProduct : ActiveRecord {
public string CategoryName {
get { return GetColumnValue(Category.Columns.CategoryName); }
set { SetColumnValue(Category.Columns.CategoryName, value); }
}
public string ProductName {
get { return GetColumnValue(Product.Columns.ProductName); }
set { SetColumnValue(Product.Columns.ProductName, value); }
}
}
它同時還具有牛排刀...
用SubSonic,你可能忽視了名字空間SubSonic.Sugar ,但如果你這樣做,你錯過了一些有用的特性。SubSonic.Sugar 沒有迷人的功能,而是它提供的"雜項"的功能包括特性為:
文件操作,如在一個請求打開和閱讀文件。
日期操作,如確定兩個日期之間有多少工作日。
字符串操作,例如轉換,以適當的情況下,或剝HTML格式。
數字操作,如確定如果一個數字是不是整數。
Web操作,如打開和閱讀一個網頁,或執行DNS查找。
驗證操作,其中包括通用簽證,萬事達卡和其他常見的信用卡驗證。
擴展SubSonic
沒有應用能夠提供滿足所有需求的解決方案,因此,使用SubSonic所生成的類是不夠的。您可能要像生成的類中添加方法,或者你可能要改變生成的類。 SubSonic滿足這兩方面的需要。
所有的SubSonic生成的類都是局部類。這意味著你可以增加功能到另一個文件,而類的名字時一樣的。 如果你不喜歡SubSonic所生成的類,你可以重寫模板,模板是asp.net頁面。
總結
你 知道你有一個數據庫,你需要連接到一個應用。你知不知道在頁面中直接發送SQL的請求是一個壞的架構。 你知道你應該為你的應用寫一數據層管理CRUD。 你真的想要得到這一切,現在做的,那你可以回家享受天倫之樂。 幫您解決所有這些在優點于一體,而不犧牲性能,可維護性和靈活性。 現在就去下載它并給它一個嘗試。 你的應用會謝謝你的。
來源:http://ctfysj.blog.hexun.com/32587843_d.html
總結
以上是生活随笔為你收集整理的subsonic mysql_Subsonic 介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python编程小组信息程序下载_300
- 下一篇: 温10怎么进入bios 温10如何进入B