Repository Pattern w/ Self Servicing

Posts   
 
    
Posts: 10
Joined: 12-Dec-2016
# Posted on: 24-Jan-2017 22:34:44   

I am working on a C# MVC 4 website, trying to trouble shoot an issue with data not refreshing properly.

SD.LLBLGEN.Pro.DQE.SqlServer.NET20 SD.LLBLGEN.Pro.LinqSupportClasses.NET35 SD.LLBLGEN.Pro.OrmSupportClasses.NET20 SD.LLBLGEN.Pro.QuerySpec

I was looking through our Repository pattern used in this project, and was curious about the static reference being held to LinqMetaData.... (I know this repository pattern below is fairly worthless, and exposes IQueryable)

Should we be holding a static reference to LinqMetaData?

Thanks


 public class BaseRepository<T> : IRepository<T> where T : CommonEntityBase
    {
        protected static readonly LinqMetaData _metaData = new LinqMetaData();

        public virtual void Insert(T entity)
        {
            if (entity == null) throw new ArgumentNullException("Entity");
            entity.Save();
        }

        public virtual void Update(T entity)
        {
            if (entity == null) throw new ArgumentNullException("Entity");
            entity.Save();
        }

        public virtual void Delete(T entity)
        {
            if (entity == null) throw new ArgumentNullException("Entity");
            entity.Delete();
        }

        public virtual IQueryable<T> Table
        {
            get { return new DataSource<T>(_metaData.TransactionToUse, new ElementCreator(), _metaData.CustomFunctionMappings, _metaData.ContextToUse); }
        }
    }

daelmo avatar
daelmo
Support Team
Posts: 8245
Joined: 28-Nov-2005
# Posted on: 26-Jan-2017 07:34:41   

What LLBLGen version and runtime are you using? ( http://www.llblgen.com/TinyForum/Messages.aspx?ThreadID=7718 )

Since v3.x, a lot of static methods in SelfServicing are moved out to DBUtils and Dao classes.

Why do you need to place this as an static member?

David Elizondo | LLBLGen Support Team
Posts: 10
Joined: 12-Dec-2016
# Posted on: 26-Jan-2017 23:50:02   

daelmo wrote:

What LLBLGen version and runtime are you using? ( http://www.llblgen.com/TinyForum/Messages.aspx?ThreadID=7718 )

Since v3.x, a lot of static methods in SelfServicing are moved out to DBUtils and Dao classes.

Why do you need to place this as an static member?

Project is C# ASP .NET MVC4, .NET 4.5 Code is generated using LLBLGen Pro version: 3.5 Code is generated using templates: SD.TemplateBindings.SharedTemplates.NET20

SD.LLBLGEN.Pro.ORMSupportClasses.NET20 Runtime Version: v2.0.50727 Version: 3.5.0.0

SD.LLBLGEN.Pro.LinqSupportClasses.NET35 Runtime Version: V2.0.50727 Version: 3.5.0.0

I did not write this code, so I'm not sure what the reason was behind having a static reference to LinqMetaData. I suspected that this static reference was causing some issues in my application. So, I am trying to figure out what the proper usage, and lifetime of a LinqMetaData object should be.

Should there be one instance of it per request in an MVC application, or is holding a static reference to it the right thing to do?

Thanks!

daelmo avatar
daelmo
Support Team
Posts: 8245
Joined: 28-Nov-2005
# Posted on: 30-Jan-2017 06:19:48   

You should instantiate a LinqMetaData every time you need one, unless it's necessary for other reasons.

In SelfServicing some static properties (as currently open connection, settings, connection strings) are hold in static members of Dao classes, but this is managed by LLBLGen Runtime. You only need to worry about use your LinqMetaData when you need one. IMHO there is not need to declare it as static in your repository.

David Elizondo | LLBLGen Support Team