locked
EF Uow architecture need ur guidance and advise? RRS feed

  • Question

  • User-111101990 posted

    hi anyone can give me some guidance? is this architecture design ok? and i can not insert a record into database? and no error. is there something i ignored? feel free to leave ur opinion,plz. thanks.

    BaseRepository.cs dal

    public partial class BaseRepository<T> where T : class
    {
        #region Private member variables...
        //internal CityLifeInfoEntities Context;
        //internal DbSet<TEntity> DbSet;
        #endregion
        // crud   Create-Read-Update-Delete  Find
        // 
        // add remove  modify  list detail
        #region Public Constructor...
        ///// <summary>
        ///// Public Constructor,initializes privately declared local variables.
        ///// </summary>
        ///// <param name="context"></param>
        //public BaseRepository(CityLifeInfoEntities context)
        //{
        //    this.Context = context;
        //    this.DbSet = context.Set<TEntity>();
        //}
        #endregion
    
        private CityLifeInfoEntities dataContext;
        //    private readonly IDbSet<T> dbset;
        internal DbSet<T> Dbset;
        //  internal DbSet<T> DbSet;
        protected BaseRepository(IDatabaseFactory databaseFactory)
        {
            DatabaseFactory = databaseFactory;
            Dbset = DataContext.Set<T>();
        }
    
        protected IDatabaseFactory DatabaseFactory
        {
            get;
            private set;
        }
    
        protected CityLifeInfoEntities DataContext
        {
            get { return dataContext ?? (dataContext = 
               DatabaseFactory.Create()); }
        }
        public virtual T Add(T entity)
        {
            //   dataContext.Database.Log = Console.Write;
    
        //    dataContext.Entry(entity).State = EntityState.Added;
    
              Dbset.Add(entity);
    
            return entity;
    }

    unitofwork.cs

    public class UnitOfWork : IUnitOfWork
    {
        private CityLifeInfoEntities dbContext;
        private readonly IDatabaseFactory dbFactory;
        protected CityLifeInfoEntities DbContext
        {
            get
            {
                return dbContext ?? dbFactory.Create();
            }
        }
    
        public UnitOfWork(IDatabaseFactory dbFactory)
        {
            this.dbFactory = dbFactory;
        }
    
        public void SaveChanges()
        {
            dbContext.SaveChanges();
        }
    }

    MemberInfoRepository.cs Dal

    public class MemberInfoRepository : BaseRepository<MemberInfo>, IMemberInfoRepository
    {
        public MemberInfoRepository(IDatabaseFactory databaseFactory)
            : base(databaseFactory)
        {
    
        }
        /// <summary>
        /// GetMemberInfoByLoginId
        /// </summary>
        /// <param name="loginId"></param>
        /// <returns></returns>
        public MemberInfo GetMemberInfoByLoginId(string loginId)
        {
          return  base.GetMany(m => m.LoginId == loginId).FirstOrDefault();
        }
        /// <summary>
        /// add a mem
        /// </summary>
        /// <param name="memberInfo"></param>
        /// <returns></returns>
        public MemberInfo Create(MemberInfo memberInfo)
        {
            return   base.Add(memberInfo);// DataContext.MemberInfo.Add(memberInfo);
        }
    }

    MemberInfoService .css Bll

     public   class MemberInfoService : IMemberInfoService
    {
        private static readonly ILog Log = 
      LogManager.GetLogger(typeof(MemberInfoService));
    
     // ReSharper disable once InconsistentNaming
        private readonly IMemberInfoRepository memberInfoRepository;
    
        private readonly IUnitOfWork unitOfWork;
        public MemberInfoService(IMemberInfoRepository repository, IUnitOfWork unitOfWork)
        {
            memberInfoRepository = repository;
    
            this.unitOfWork = unitOfWork;
        }
    
        public MemberInfo GetMemberInfoByLoginId(string loginId)
        {
          var mi=   memberInfoRepository.GetMemberInfoByLoginId(loginId);
            unitOfWork.SaveChanges();
            return mi;
        }
    
     public MemberInfo Create(MemberInfo memberInfo)
     {
          var memberinfo = memberInfoRepository.Create(memberInfo);
            unitOfWork.SaveChanges();
         return memberinfo;
     }
    }

    Saturday, April 15, 2017 2:03 AM

All replies

  • User-1838255255 posted

    Hi codelayer,

    codelayer

    public MemberInfo Create(MemberInfo memberInfo)
     {
          var memberinfo = memberInfoRepository.Create(memberInfo);
            unitOfWork.SaveChanges();
         return memberinfo;
     }

    I have checked out your code, I notice that you create a memberInfo object, but I notice that you don't add value to this object, instead execute SaveChanges method directly.

    You could use memberInfoRepository.Insert  method to add a new record.

    If my understating is wrong, please correct me.

    Best Regards,

    Eric Du

     

    Monday, April 17, 2017 10:56 AM