Code First是一種用于創(chuàng)建數(shù)據(jù)庫(kù)表格的方法,首先定義實(shí)體類(lèi),然后通過(guò)實(shí)體類(lèi)創(chuàng)建相應(yīng)的表格,在Entity Framework中,Code First最開(kāi)始支持的是SQL Server數(shù)據(jù)庫(kù),而后又增加了MySQL、SQLite等數(shù)據(jù)庫(kù),但是直到EF 6版本仍然沒(méi)有支持Oracle數(shù)據(jù)庫(kù),所以我們需要通過(guò)第三方組件實(shí)現(xiàn)。
目前比較主流的用于Code First Oracle的組件是OracleEntityFramework,該組件可以在Nuget中搜索到下載并安裝。
安裝完成后,需要在App.config或Web.config中添加Oracle的連接字符串:
之后,需要在DbContext的OnModelCreating方法中指定使用的數(shù)據(jù)庫(kù)類(lèi)型,代碼如下:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("schema_name");
modelBuilder.Entity().ToTable("table_name", "schema_name");
modelBuilder.Properties().Configure(p =>p.HasColumnType("DATE"));
modelBuilder.HasDatabaseGeneratedOption(e =>e.ID, DatabaseGeneratedOption.Identity);
modelBuilder.Entity().HasKey(e =>e.ID);
}
代碼中的schema_name是Oracle數(shù)據(jù)庫(kù)的用戶(hù)名,table_name是表格名,EntityName是相應(yīng)的實(shí)體類(lèi)名,可以根據(jù)具體情況進(jìn)行調(diào)整。
除了指定數(shù)據(jù)庫(kù)外,還可以使用特性來(lái)指定表格名和字段名,如下:
[Table("table_name", Schema = "schema_name")]
public class EntityName
{
[Column("column_name")]
public int ID { get; set; }
public string Name { get; set; }
}
在實(shí)體類(lèi)中,也可以使用其他常用的特性,如MaxLength、Required等。
在使用過(guò)程中,需要注意Oracle數(shù)據(jù)庫(kù)與其他數(shù)據(jù)庫(kù)的差異,例如Oracle不支持字符串類(lèi)型的默認(rèn)長(zhǎng)度,需要手動(dòng)指定,例如:
[MaxLength(50)]
public string Name { get; set; }
還需要注意的是,在執(zhí)行增刪改查操作時(shí),需要使用Oracle.ManagedDataAccess.Client命名空間下的類(lèi),例如OracleCommand、OracleParameter等,代碼如下:
using (var db = new OracleDbContext())
{
var entity = new EntityName() { Name = "Tom" };
db.EntityNames.Add(entity);
db.SaveChanges();
var result = db.EntityNames.FirstOrDefault(e =>e.Name == "Tom");
}
通過(guò)這些步驟,就可以在Code First項(xiàng)目中使用Oracle數(shù)據(jù)庫(kù)了。