内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
我正在尝试使用实体框架的代码优先概念创建一个新的数据库。但是,在运行代码时没有创建数据库(使用DropCreateDatabaseIfModelChanges
设置),尽管代码运行良好。当我试图从数据库中获取一些东西时,我看到了下面的异常。
我的项目是使用单独的DataAccess
层,具有通用服务和存储库结构。因此,我的所有实体、存储库以及数据库上下文都在解决方案中的一个单独项目中。
我的global.asax
文件包含以下代码。
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyContext>());
如果没有新的数据库,这应该会初始化,对吗?
我的数据库上下文类如下所示;
namespace Website.DAL.Model { public class MyContext : DbContext { public IDbSet<Project> Projects { get; set; } public IDbSet<Portfolio> Portfolios { get; set; } /// <summary> /// The constructor, we provide the connectionstring to be used to it's base class. /// </summary> public MyContext() : base("MyConnectionString") { } static MyContext() { try { Database.SetInitializer<MyContext>(new DropCreateDatabaseIfModelChanges<MyContext>()); } catch (Exception) { throw; } } /// <summary> /// This method prevents the plurarization of table names /// </summary> /// <param name="modelBuilder"></param> protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Conventions.Remove<System.Data.Entity.ModelConfiguration.Conventions.PluralizingTableNameConvention>(); } } }
这对我来说都是新的,但据我所知,到目前为止一切似乎都是正确的。所以现在我用的两个实体。他们被称为“项目”和“投资组合”。它们长得像这样;
public class Portfolio { [Key] public Guid Id { get; set; } public String Name { get; set; } public DateTime StartDate { get; set; } public DateTime? EndDate { get; set; } public bool IsPublished { get; set; } public virtual ICollection<Project> Projects { get; set; } }
和
public class Project { [Key] public Guid Id { get; set; } public DateTime StartDate { get; set; } public DateTime? EndDate { get; set; } public bool IsPublished { get; set; } public String Title { get; set; } }
我使用的数据库运行在一个外部服务器上,它是与我使用的主机提供商一起提供的。我已经启动并运行了一个SQLServer数据库,到数据库的连接字符串位于web.config
网站项目。我已经尝试过删除数据库并让代码重新创建它,不幸的是,这是行不通的。我是不是漏掉了什么明显的东西?或者,作为服务器的访问权限,创建数据库是否是一件简单的事情?
注意:当我运行Database-Update -Script
命令生成SQL代码,似乎创建了创建所有表的正确SQL语句。
我向我的实体添加了两个属性来强制进行一些更改,并且我还创建了一个像这样的自定义初始化器;
public class ForceDeleteInitializer : IDatabaseInitializer<MyContext> { private readonly IDatabaseInitializer<MyContext> _initializer = new DropCreateDatabaseIfModelChanges<MyContext>(); public ForceDeleteInitializer() { //_initializer = new ForceDeleteInitializer(); } public void InitializeDatabase(MyContext context) { //This command is added to prevent open connections. See http://stackoverflow.com/questions/5288996/database-in-use-error-with-entity-framework-4-code-first context.Database.ExecuteSqlCommand("ALTER DATABASE borloOntwikkel SET SINGLE_USER WITH ROLLBACK IMMEDIATE"); _initializer.InitializeDatabase(context); } }
我还从上下文的构造函数中删除了初始化器,这意味着我已经删除了这一行代码;
Database.SetInitializer<MyContext>(new DropCreateDatabaseIfModelChanges<MyContext>());
之后,我将这三行添加到Global.asax文件中;
Database.SetInitializer(new ForceDeleteInitializer()); MyContext c = new MyContext(); c.Database.Initialize(true);
在调试时,我现在得到了这个异常;
这给了我以下信息:
在这些操作之后,数据库是不可访问的,所以很有可能被删除。
这件事能做些什么呢?很可能我无法访问主数据库,因为我的主机提供者当然不会给我适当的访问权限。
检查连接字符串是否指向正确的数据库,并添加如下授权属性以访问数据库:
<add name="PatientContext" providerName="System.Data.SqlClient" connectionString="Server=SQLSERVER2; Database=Patients; uid=PatientUser; password=123456; Integrated Security=False;" />
目前呼叫中心只有API文档,需要用户自己开发。如果用户需要saas系统的呼叫中心可以使用智能外呼机器人:https://cloud.tencent.com/product/ccsr
你有没有调整观众端表现,即通过对 LivePushConfig 中的homeOrientation设置项进行配置,它控制的是观众端看到的视频宽高比是16:9还是6:19,调整后的结果可以用播放器查看以确认是否符合预期。
控制台使用的是新的接口,批量创建子网,https://cloud.tencent.com/document/product/215/31960,可以指定路由表。terraform开发的时候是基于api2.0开发的,还没有这个接口,因此暂时无法使用