2011-04-11 70 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); 
} 

一一点智能感知检查很长一段时间!希望这可以帮助别人......

相关问题