Dav*_*veo 1 generics entity-framework repository-pattern entity-framework-ctp5
我有一个通用的存储库,我试图添加一个GetById方法,如下所示 C#LINQ to SQL:重构这个通用的GetByID方法
问题是我的存储库不使用System.Data.Linq.DataContext而是使用System.Data.Entity.DbContext
所以我在尝试使用时遇到错误
Mapping.GetMetaType
Run Code Online (Sandbox Code Playgroud)
和
return _set.Where( whereExpression).Single();
Run Code Online (Sandbox Code Playgroud)
如何在CTP5中实现通用的GetById方法?我应该在我的存储库中使用System.Data.Entity.DbContext.
这是我的存储库类的开始
public class BaseRepository<T> where T : class
{
private DbContext _context;
private readonly DbSet<T> _set;
public BaseRepository()
{
_context = new MyDBContext();
_set = _context.Set<T>();
}
Run Code Online (Sandbox Code Playgroud)
Lad*_*nka 10
最基本的方法很简单
public T GetById(params object[] keys)
{
_set.Find(keys);
}
Run Code Online (Sandbox Code Playgroud)
如果您知道所有实体都具有名为Id的主键(它不必在DB中称为Id,但必须映射到属性Id),则可以使用以下命令:
public interface IEntity
{
int Id { get; }
}
public class BaseRepository<T> where T : class, IEntity
{
...
public T GetById(int id)
{
_set.Find(id);
}
}
Run Code Online (Sandbox Code Playgroud)
如果数据类型并不总是相同,您可以使用:
public interface IEntity<TKey>
{
TKey Id { get; }
}
public class BaseRepository<TEntity, TKey> where TEntity : class, IEntity<TKey>
{
...
public TEntity GetById(TKey id)
{
_set.Find(id);
}
}
Run Code Online (Sandbox Code Playgroud)
你也可以简单地使用:
public class BaseRepository<TEntity, TKey> where TEntity : class
{
...
public TEntity GetById(TKey id)
{
_set.Find(id);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4569 次 |
| 最近记录: |