代码改变世界

SQLite Code配置DbConfiguration

2016-06-01 09:54  Dorisoy  阅读(1214)  评论(1编辑  收藏  举报
 [DbConfigurationType(typeof(SQLiteConfiguration))]
    public partial class rsapiEntities : DbContext
    {
        public rsapiEntities()
            : base("name=rsapiEntities")
        {

            Database.SetInitializer<rsapiEntities>(new MigrateDatabaseToLatestVersion<rsapiEntities, APIDbMigrationsConfiguration>());
            //this.Configuration.AutoDetectChangesEnabled = false;//关闭自动跟踪对象的属性变化
            this.Configuration.LazyLoadingEnabled = false; //关闭延迟加载
            //this.Configuration.ProxyCreationEnabled = false; //关闭代理类
            //this.Configuration.ValidateOnSaveEnabled = false; //关闭保存时的实体验证
            //this.Configuration.UseDatabaseNullSemantics = true; //关闭数据库null比较行为

            //((IObjectContextAdapter) this).ObjectContext.ContextOptions.LazyLoadingEnabled = true;
        }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            //dynamically load all configuration
            modelBuilder.Configurations.AddFromAssembly(typeof(rsapiEntities).Assembly);

            //...or do it manually below. For example,
            //modelBuilder.Configurations.Add(new PartnersMap());
            //modelBuilder.Configurations.Add(new EndpointPolicyMap());
            //modelBuilder.Configurations.Add(new ThrottlePolicyMap());

            //throw new UnintentionalCodeFirstException();
        }

        public virtual DbSet<partners> partners { get; set; }
        public virtual DbSet<endpoint_policy> endpoint_policy { get; set; }
        public virtual DbSet<throttle_policy> throttle_policy { get; set; }
    }


    internal sealed class APIDbMigrationsConfiguration : DbMigrationsConfiguration<rsapiEntities>
    {
        public APIDbMigrationsConfiguration()
        {
            AutomaticMigrationsEnabled = true;
            AutomaticMigrationDataLossAllowed = true;
        }
    }


    public class SQLiteConfiguration : DbConfiguration
    {
        public SQLiteConfiguration()
        {
            SetProviderFactory("System.Data.SQLite", SQLiteFactory.Instance);
            SetProviderFactory("System.Data.SQLite.EF6", SQLiteProviderFactory.Instance);
            Type t = Type.GetType("System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6");
            FieldInfo fi = t.GetField("Instance", BindingFlags.NonPublic | BindingFlags.Static);
            SetProviderServices("System.Data.SQLite", (System.Data.Entity.Core.Common.DbProviderServices)fi.GetValue(null));
        }
    }