2011-04-11 49 views
8

我正在使用實體框架代碼的第一種方法,並且我正在構建一個提供數據訪問的通用Repository類。在這門課我想要一個Add(T entity)方法。然而,沒有InsertOnSubmit方法爲DbSet<T>類的一部分,如果我嘗試使用Add方法,我得到一個編譯時錯誤:InsertOnSubmit等效於DbContext.DbSet使用Entity Framework 4代碼優先

The type 'TEntity' must be a reference type in order to use it as parameter 'TEntity' in the generic type or method 'System.Data.Entity.DbContext.Set<TEntity>()' 

這是方法:

public TEntity Add(TEntity entity) 
{ 
    return _database.Set<TEntity>().Add(entity); 
} 

任何人都知道解決這個問題的方法嗎?

感謝

+0

供個人使用的,我可以問你什麼「_database」是在您的應用程序?我試圖做一個像你的方法,它抱怨Set方法..預先感謝您! – 2011-05-14 19:02:47

+0

yeh man,_database字段的類型是DbContext,它在實體框架中找到。看看ScotGu的博客關於使用實體框架4代碼的第一種方法,它非常簡單:http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework -4.aspx – jcvandan 2011-05-16 08:44:36

+0

謝謝。我讀一個..我有一個獎金問題:P .Set方法,那是什麼代碼?我用快速的方式說了一句,並沒有發現那種方法。這是我完成項目所需的代碼的最後一部分。如果您向我發送了.Set方法代碼,您非常歡迎收到我的郵件。 :D – 2011-05-16 17:25:23

回答

12

添加通用約束到你的資料庫類:

public class Repository<TEntity> where TEntity : class 
+0

很酷,這是更好的解決方案+1 – jcvandan 2011-04-26 08:51:01

5

我也真的只是張貼了這個問題,但我已經找到了解決問題的方式 - 使用Set(T型)方法,而不是通用的版本,像這樣:

public TEntity Add(TEntity entity) 
{ 
    return (TEntity)_database.Set(typeof(TEntity)).Add(entity); 
} 

一一點智能感知檢查很長一段時間!希望這可以幫助別人......

相關問題