2017-09-22 96 views
1

ORM是實體框架核心。 DataModel中有大約100種類型的實體。有沒有辦法避免爲每個人輸入樣板文件的基本CRUD操作代碼?實體框架核心:自動化爲每個實體實現CRUD?

public static async Task UpdateAsync(this Foo foo) 
{ 
    using (var db = new DBContext()) 
    { 
     db.Foo.Update(); 
     await db.SaveChangesAsync(); 
    } 
} 

public static async Task UpdateAsync(this Bar bar) 
{ 
    using (var db = new DBContext()) 
    { 
     db.Bar.Update(bar); 
     await db.SaveChangesAsync(); 
    } 
} 

UPDATE:在這種情況下 如何使用泛型?

public static async Task RemoveFooAsync(int fooID) 
{ 
    using (var db = new DBContext()) 
    { 
      db.Foo.Remove(db.Foo.Single(x => x.FooID == fooID)); 
      await db.SaveChangesAsync(); 
    } 
} 
+0

你可以使用泛型? 'UpdateAsync (this T obj)where T:IMyEntity' – poke

+0

對於id刪除的情況,顯然你需要在'IMyEntity'類型中有一個通用的'Id'。 – poke

回答

1

實體框架工作本身是通用的,因此您不需要那樣做。

using (var dbCtx = new SchoolDBEntities()) 
    { 
     //Add newStudent entity into DbEntityEntry and mark EntityState to Added 
     dbCtx.Entry(newStudent).State = System.Data.Entity.EntityState.Added; 

     // call SaveChanges method to save new Student into database 
     dbCtx.SaveChanges(); 
    } 

這裏進入PARAM可以在應用程序Db的語境任何類型的<>實體

創建使用實體對象

使用update以同樣的方式,例如可重複使用的方法:

//save modified entity using new Context 
using (var dbCtx = new SchoolDBEntities()) 
{ 
    //3. Mark entity as modified 
    dbCtx.Entry(stud).State = System.Data.Entity.EntityState.Modified;  

//4. call SaveChanges 
dbCtx.SaveChanges(); 
} 
+0

我使用實體框架的核心 – AsValeO

+0

沒關係,應該是5或更高版本 –

+0

更新的方式相同。 –