EF 的 霸氣配置

2022-02-04 10:30:35 字數 2662 閱讀 5688

通過ef 作為運算元據庫的工具有一段時間了,也做了幾個相對不大的專案,慢慢的也對ef的使用摸索出來了一些規則,雖然說不是技術難點,但是,我說的是但是,能夠提高我們開發效率的棉花糖有時我們還是必須要吃的,因為他確實很甜很甜。現在ef已經更新到6.1.1了,從原來的5.0 到現在也不過是短短的一年多,所以說ef的生命力還是很強的。什麼 你要我對比一下ef和nhibernate的優缺點,這不是本文的重點,我只說一句,ef側重**配置,nhibernate 側重配置檔案配置,但是說哪種好,蘿蔔白菜 各有所愛吧。

剛開始使用ef運算元據表我們是這樣使用的,通過在dbcontext中新增dbset這種形式的屬性來實現,但是,我說的是但是,這種方式隨著我們的實體domain越來越多的時候我們不得不乙個乙個的新增到dbcontext中,這不禁讓我很苦惱,有沒有更好的辦法呢?

為了說明的方便,我建立了乙個控制台的程式,畢竟ef和具體的專案型別無關。

1  classprogram

2 9 }

10 11 public classtestcontext : dbcontext

12 23 return_instance;

24 }

25 }

26 27 private string_connectionstring;

28 29 public stringconnectionstring

30 37 return_connectionstring;

38 }

39 set

40 43 }

44 45 publictestcontext()

46 : base("name=testconn")

47 50 public testcontext(stringconnectionstring)

51 : base(connectionstring)

52 55

56 /// 57 ///定義的實體

58 ///

59 public dbsetpersons

60 }

61 [table("person")]

62 public classperson

63 65

66 public string age

67 }

每次新增實體domain 都要在dbcontext 中新增乙個對應的屬性,很令人苦惱,並且如果屬性為string 型別,在資料庫中建立的表的長度為max,當然我們可以修改ef的預設約定來讓string 型別在資料表中具有一定的長度。我們有沒有更好的方式來控制ef建立的資料表呢,並且要易於維護,讓所有同事都可以很輕鬆的掌握。當然,有乙個新大陸被發現了。

我們通過反射來找到所有繼承自entitytypeconfiguration的類,這些類就是ef的對映類,我們把這些對映類新增到ef  configuration中就可以實現我們的功能,說太多,上**。

1  classprogram

2 9 }

10 11 public classtestcontext : dbcontext

12 23 return_instance;

24 }

25 }

26 27 private string_connectionstring;

28 29 public stringconnectionstring

30 37 return_connectionstring;

38 }

39 set

40 43 }

44 45 publictestcontext()

46 : base("name=testconn")

47 50 public testcontext(stringconnectionstring)

51 : base(connectionstring)

52 55 protected override voidonmodelcreating(dbmodelbuilder modelbuilder)

56 67

68 base.onmodelcreating(modelbuilder);

69 }

70 71

72 }

73 74 public classbasedomain

75 78 [table("person")]

79 public classperson

80 82 public string name

83 84 public string age

85 }

86 89 public override voidinit()

90 {

91 this.totable("

EF實體配置

ef 有 中的模型類的配置有 dataannotations fluentapi 兩種 1.dataannotations 實體類屬性上標註attribute 必填字段標註 required 字段長度 maxlength 5 用 可空字段用 int?如果欄位在資料庫有預設值,則要在屬性上標註 dat...

EF6 x Oracle 配置問題

用ef已經將近一年了,當初選擇ef作為orm框架,也是仗著自己對c linq相關底子還可以,學起來能盡快上手。但是用了一年的,一直用的是比較舊的版本ef4,新版本一直提示為框架不匹配,當初專案週期比較緊,所以也沒有作深究,最近有時間就研究了一下,今天終於算是配置好了。其實網上有很多無法更新的解決方案...

SQLite使用EF6的連線配置

1.使用nuget安裝sqliteinstall package system.data.sqlite安裝好後的依賴項有 如果沒有安裝全,則需要手動安裝需要的dll 2.安裝時會自動配置配置檔案。配置好的檔案如下 注意 configsections配置節一定要在connectionstrings節之...