ASP.NET 5 MVC 6 Generic Repository Pattern

前端 未结 3 2067
清酒与你
清酒与你 2021-02-10 14:34

Been looking every where for a tutorial or something.

I\'ve been trying to implement my old generic repository pattern for MVC5 into a new MVC6 project.

I set up

相关标签:
3条回答
  • 2021-02-10 14:42

    In Entity Framework 7 IDbSet itself represents an implementation of Repository pattern.

    /// <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>
    

    Source: GitHub EntityFramework7 repo, DbContext.cs 24-27 line

    And DBContext it's implementation of UnitOfWork

    0 讨论(0)
  • 2021-02-10 14:45

    Entity Framework 7 Beta 8 doesn't come with the Find Method. It will probably be added before the final release.

    You will have to use the the FirstOrDefault method instead until that happens

    public virtual T GetById(int id)
    {
        return this.Entities.FirstOrDefault(x => x.Id == id);
    }
    

    Because Id property will not be recognized you'll have to add an interface and make your repository implement it.

    public interface IEntity
    {
         int Id { get; set; }
    }
    

    e.g.

     public class GenericRepository<T> : IGenericRepository<T> where T: class, IEntity
    

    From the github issues list. EF7 does not perform automatic data validation so DbEntityValidationException does not exist in EF7.

    Take note: EF7 is not a update of EF but a rewrite.

    0 讨论(0)
  • 2021-02-10 15:02

    On the contrary of firste's answer, I'm not confident by using FirstOrDefault, cause it will generates a SELECT TOP 1 [...].

    In many cases, the Id should be unique, but sometimes you can have bad designed Db's. If not, your application should throws an exception (that's what we're looking after).

    So, until EF7 implements a Find() method, I strongly suggest using SingleOrDefault() :

    public virtual T GetById(int id)
    {
        return this.Entities.SingleOrDefault(x => x.Id == id);
    }
    

    Like that, you add an application control to verify that Id should be unique, taking no cares if the Db is correctly done or not. It add another level of security to your business.

    0 讨论(0)
提交回复
热议问题