entity framework winform 依赖注入

 public interface IRepository<TEntity> where TEntity : class
    {
        void Insert(TEntity entity);
        void Update(TEntity entity);
        void Delete(TEntity entity);
        TEntity GetEntityById(object id);
        IList<TEntity> GetAllEntities();
        IList<TEntity> GetEntities(Expression<Func<TEntity, bool>> filter);
        IList<TEntity> GetEntitiesByPage(int page, int pageSize);
        IList<TEntity> GetEntitiesByPage(Expression<Func<TEntity, bool>> filter, int page, int pageSize);
        IDbSet<TEntity> Table { get; }
    }

  public partial class Repository<TEntity> : IRepository<TEntity> where TEntity : class
    {
        private IDbSet<TEntity> table = null;
        public DataAccessDbContext dbContext = null;
        public Repository()
        {
            dbContext = new DataAccessDbContext();
        }


        protected string GetFullErrorText(DbEntityValidationException exc)
        {
            var msg = string.Empty;
            foreach (var validationErrors in exc.EntityValidationErrors)
                foreach (var error in validationErrors.ValidationErrors)
                    msg += string.Format("Property: {0} Error: {1}", error.PropertyName, error.ErrorMessage) + Environment.NewLine;
            return msg;
        }


        public virtual void Insert(TEntity entity)
        {
            try
            {
                Table.Add(entity);
                dbContext.SaveChanges();
            }
            catch (DbEntityValidationException ep)
            {
                throw new Exception(GetFullErrorText(ep));
            }
            catch (Exception ep)
            {
                throw ep;
            }
        }


        public virtual void Update(TEntity entity)
        {
            try
            {
                if (entity == null)
                    throw new ArgumentNullException("Entity is null...");
                Table.Attach(entity);
                dbContext.Entry(entity).State = EntityState.Modified;
                dbContext.SaveChanges();
            }
            catch (DbEntityValidationException ep)
            {
                throw new Exception(GetFullErrorText(ep));
            }
            catch (Exception ep)
            {
                throw ep;  // You can also choose to handle the exception here...
            }
        }


        public virtual void Delete(TEntity entity)
        {
            if (dbContext.Entry(entity).State == EntityState.Detached)
            {
                Table.Attach(entity);
            }
            Table.Remove(entity);
            dbContext.SaveChanges();
        }


        public virtual void Delete(object id)
        {
            TEntity entity = Table.Find(id);
            Delete(entity);
        }


        public virtual IList<TEntity> GetAllEntities()
        {
            return Table.ToList();
        }


        public virtual TEntity GetEntityById(object id)
        {
            return Table.Find(id);
        }


        public virtual IList<TEntity> GetEntities(Expression<Func<TEntity, bool>> filter)
        {
            return Table.Where<TEntity>(filter).ToList<TEntity>();
        }


        public IList<TEntity> GetEntitiesByPage(int page, int pageSize)
        {
            return Table.Skip((page - 1) * pageSize).Take(pageSize).ToList();
        }


        public IList<TEntity> GetEntitiesByPage(Expression<Func<TEntity, bool>> filter, int page, int pageSize)
        {
            return Table.Where(filter).Skip((page - 1) * pageSize).Take(pageSize).ToList();
        }


        public virtual IDbSet<TEntity> Table
        {
            get
            {
                if (table == null)
                    table = dbContext.Set<TEntity>();
                return table;
            }
        }
    }

public class DataAccessDbContext : DbContext
    {
        public DataAccessDbContext () : base("connectionString")
        {
 
        }
 
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            Assembly ass = Assembly.GetExecutingAssembly();
            Type[] types = ass.GetTypes();
            foreach (var item in types)
            {
                if (item.BaseType.IsGenericType && item.BaseType.GetGenericTypeDefinition() == typeof(EntityTypeConfiguration<>))
                {
                    dynamic obj = Activator.CreateInstance(item);
                    modelBuilder.Configurations.Add(obj);
                }
            }
            base.OnModelCreating(modelBuilder);
        }
}

 

 public static class AutoFacContainer
    {
        private static IContainer ic = null;
        private static ContainerBuilder builder = null;
        public static void Regsitry()
        {
            builder = new ContainerBuilder();
            Type[] types = Assembly.GetAssembly(typeof(Asset)).GetTypes().Where(d => d.Namespace == "Super.Core.Models").ToArray();
            builder.RegisterTypes(types);
            builder.RegisterType(typeof(DataAccessDbContext ));
            builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));//必须的
            builder.RegisterAssemblyTypes(Assembly.GetAssembly(typeof(UserCenterBLL))).AsImplementedInterfaces().AsSelf();
            ic = builder.Build(ContainerBuildOptions.None);
        }
 
        public static T Resolve<T>()
        {
            return ic.Resolve<T>();
        }
    }
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用WinformEntity Framework Core进行多数据库操作时,我们需要注意以下几个方面。 首先,需要在项目中引入Entity Framework Core的相关包。 接下来,在创建DbContext时,我们需要根据具体的数据库类型(例如MySQL、SQL Server等)来选择不同的数据库提供程序。可以通过在DbContext的构造函数中传入相应的数据库连接字符串来实现。 在操作数据库时,可以使用Entity Framework Core提供的数据库迁移功能来自动创建数据库表和更新数据库结构。通过运行`add-migration`和`update-database`命令,可以根据实体类的变化来自动创建表和更新数据库。 在多数据库操作时,我们需要为每个数据库定义独立的DbContext,并在业务代码中根据具体需求使用不同的DbContext进行操作。 需要注意的是,在使用多数据库时,我们还需要考虑事务管理的问题。可以使用Entity Framework Core提供的`Database.BeginTransactionAsync`方法来开启一个事务,然后在事务中执行多个数据库操作。 另外,为了便于管理和维护代码,我们可以将操作不同数据库的代码封装为不同的服务或仓储类,并使用依赖注入注入具体的实现。这样可以提高代码的可读性和可维护性。 总结来说,使用WinformEntity Framework Core进行多数据库操作需要注意选择合适的数据库提供程序、定义独立的DbContext、使用数据库迁移来管理数据库结构、注意事务管理,并将代码进行封装和依赖注入,以提高代码的可读性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值