正文html
在面向對象的概念愈來愈深刻的今天,Code First開發模式想必也再也不陌生,開發關注點由數據庫爲主變爲以對象結構爲主數據庫
在開發程序時,以編程的思想去考慮,如何用對象結構表示這一數據結構,至於數據結構的載體是什麼數據庫,無所謂了編程
在面得對象的框架中,EF是作得比較好了,特別是Code First模式下,數據表能自動生成,相比通常的形式,創建對象,再按對象生成數據庫腳本,好多重複工做api
CRL一樣採用Code First開發模式,更值得一提的是,數據結構是自動建立的,不管是增長對象,或增長對象的屬性(固然沒能自動刪除)緩存
來看一個簡單對象定義數據結構
[CRL.Attribute.Table(TableName = "TestModel_1")]//定義映射名 public class TestModel : CRL.IModel { [CRL.Attribute.Field(IsPrimaryKey = true)]//定義爲主鍵 public int Id { get; set; } [CRL.Attribute.Field(Length = 50)]//定義列長度 public string Name { get; set; } }
在上面定義中使用了CRL.Attribute.Table和CRL.Attribute.Field屬性標註,當要指定對應的數據結限定,使用此標註便可框架
建立對象管理類分佈式
public class TestModelManage : CRL.BaseProvider<TestModel> { public static TestModelManage Instance { get { return new TestModelManage(); } } }
調用試試看(重點來了,通常框架確定會報錯,找不到數據表,CRL不會,由於它自動建立了)ide
var data = TestModelManage.Instance.QueryList(b => b.Id > 0);
看數據庫裏結構post
再增長一個屬性 Name2,重編譯運行上面代碼
能夠看到增長的屬性自動建立了對應的字段
CRL如何作到這點
上面對象定義了Name長度爲50,在插入此數據時,若是數據長度超過了50,會怎麼樣呢
var data2 = new TestModel(); data2.Name = "這是一個超過50的字符串這是一個超過50的字符串這是一個超過50的字符串這是一個超過50的字符串這是一個超過50的字符串這是一個超過50的字符串這是一個超過50的字符串這是一個超過50的字符串這是一個超過50的字符串"; TestModelManage.Instance.Add(data2);
正常會報數據庫錯誤,如SQL會報將截斷字符串,也不會告訴你是哪一個字段,而CRL會拋出異常
也能夠對數據自定義檢查
重寫TestModel的CheckData方法,這裏就能夠自由發揮了,如按業務規則,從根本上封堵了錯誤數據的產生
public override string CheckData() { if (Name!="hubro") { return "輸入的值?"; } return base.CheckData(); }
data2.Name = "ggy";
TestModelManage.Instance.Add(data2);
運行結果
重複數據提交判斷
當在短期內, 插入相同的數據,CRL默認爲重複提交了,重複依據爲數據內容MD5值
同時插入兩條相同的數據
var data2 = new TestModel(); data2.Name = "hubro"; TestModelManage.Instance.Add(data2); var data3 = new TestModel(); data3.Name = "hubro"; TestModelManage.Instance.Add(data3);
運行以下
若要關閉,重寫TestModel方法
protected override bool CheckRepeatedInsert { get { return false; } }
CRL Code First開發方式介紹到這裏
更詳細的例子見CRL開發文檔