到处找教程之类的东西。
我一直试图将MVC5的旧通用存储库模式实现到一个新的MVC6项目中。
我设置了3个类库的.Core、.Data和.Service,但是IDBset有问题,似乎我的intellisense不喜欢它,我尝试添加System.Data和实体框架6,但是没有任何结果(无法找到it...confusing)。
在google上漫游之后,我决定在这里问一问,是否有一个有正确方法的教程,或者有人可以抛出一个非常简单的MVC6通用存储库模式?我有一种感觉,旧的方法做它可能已经改变,只是找不到任何其他信息,除了内置的DI。
代码:我的IDbContext接口
IDbSet<TEntity> Set<TEntity>() where TEntity : BaseEntity;没有看到IDbSet,这仅仅是因为实体框架?我确实有它的参考资料。
问题可能是我找不到实体框架的使用状态。
更新:
使用实体框架8.0.0 beta。将所有IDbset引用更改为DbSet。
但是,在我的通用存储库中,我使用了如下方法:
public virtual T GetById(object id)
{
return this.Entities.Find(id);
}“找到”不是一种方法。我再也不能在我的标语里使用"DbEntityValidationException“了。
发布于 2015-11-11 11:18:29
EntityFramework7Beta 8没有附带Find方法。它可能会在最终版本发布之前添加。
在此之前,您必须使用FirstOrDefault方法。
public virtual T GetById(int id)
{
return this.Entities.FirstOrDefault(x => x.Id == id);
}因为Id属性不会被识别,所以您必须添加一个接口并使您的存储库实现它。
public interface IEntity
{
int Id { get; set; }
}例如:
public class GenericRepository<T> : IGenericRepository<T> where T: class, IEntity来自github问题清单。EF7不执行自动数据验证,因此DbEntityValidationException不存在于EF7中。
注意: EF7不是EF的更新,而是重写。
发布于 2015-11-11 11:20:10
在实体框架7中,IDbSet本身代表了存储库模式的实现。
/// <summary>
/// A DbContext instance represents a session with the database and can be used to query and save
/// instances of your entities. DbContext is a combination of the Unit Of Work and Repository patterns.
/// </summary>资料来源: GitHub EntityFramework7 repo,DbContext.cs 24-27线
和DBContext -- UnitOfWork的实现
发布于 2016-03-18 11:41:07
与firste的回答相反,我不相信使用FirstOrDefault,因为它会产生一个选择前1.
在很多情况下,Id应该是唯一的,但有时您可能会有错误设计的Db。如果没有,应用程序应该抛出一个异常(这就是我们正在处理的)。
因此,在SingleOrDefault()实现Find()方法之前,我强烈建议使用EF7:
public virtual T GetById(int id)
{
return this.Entities.SingleOrDefault(x => x.Id == id);
}这样,您就添加了一个应用程序控件来验证Id是否是唯一的,而不关心Db是否正确完成。它为您的业务增加了另一个级别的安全性。
https://stackoverflow.com/questions/33647984
复制相似问题