我没有选择创建数据第一个实体框架实现。我想扩展生成的类以包含一个通用基类,我可以调用所有基本函数。 (我知道如何更新t4模板)
更新(如果当前不在DB中添加),GetAll,选择(基于参数)和删除功能。我发现了一些我认为可能有用的东西,但它们没有完全合格的命名空间,我无法弄清楚信息的存储位置。
Creating base class for Entities in Entity Framework - 就是这样一个基本上与我的问题重复,但答案并不完整。
具有完全限定名称空间的此基类的示例是什么?
答案 0 :(得分:0)
即使您有数据库,仍然可以使用Code First。您可以生成模型。取决于您的需求,请参阅两种不同的方法来解决问题。
public abstract class BaseRepository<TEntity> where TEntity : class
{
protected DbContext context;
protected BaseRepository(MyDbContext context)
{
this.context = context;
}
public List<TEntity> GetAll()
{
// Set<TEntity> provides you an access to entity DbSet
// Just like if you call context.Users or context.[AnyTableName]
return context.Set<TEntity>().ToList();
}
}
接下来,您要实现特定于实体的存储库:
public class UserRepository : BaseRepository<User>
{
public UserRepository(MyDbContext context) : base(context)
{
}
}
简单用法示例:
using (var context = new MyDbContext())
{
var userRepository = new UserRepository(context);
var users = userRepository.GetAll();
}
public class MyContext : DbContext
{
public DbSet<User> Users { get; set; }
// ... more DbSets
public List<TEntity> GetAll<TEntity>() where TEntity : class
{
return Set<TEntity>().ToList();
}
// For entities that implement INamedEntity interface
// with property Name.
public TNamedEntity FindByName<TNamedEntity>(string name)
where TNamedEntity : INamedEntity, class
{
return Set<TNamedEntity>()
.FirstOrDefault(entity => entity.Name == name);
}
}
我使用nuget package EntityFramework
。 DbContext
和DbSet
来自System.Data.Entity
命名空间。
希望您能够开始并实施所需的所有方法。