我一直在摸不着头几个小时,但似乎无法弄清楚出了什么问题。
以下是我们的项目基本设置:
以下是我们的工作:
SampleData
方法创建了一个DropCreateDatabaseAlways<Entities>
类扩展Seed
以播种数据。System.Data.Entity.Database.SetInitializer(new Models.SampleData());
中使用Application_Start
将数据播种到我们的数据库。添加了预处理器指令,以便在我们的远程Azure环境中的每个应用程序启动时停止销毁Entity数据库:
#if DEBUG
System.Data.Entity.Database.SetInitializer(new Models.SampleData());
#else
System.Data.Entity.Database.SetInitializer<Entities>(null);
#endif
这是丑陋的地方
AutomaticMigrationsEnabled = true;
今天,我们注意到Azure环境中存在一个未知错误:
SuperClass
SuperClass
表中,使用鉴别器知道在加载各个类时要从哪个列进行输入虽然在今天之前装载的情况还不错,但它已经不复存在了。我们收到以下错误消息:
The 'Foo' property on 'SubClass1' could not be set to a 'null' value. You must set this property to a non-null value of type 'Int32'.
SuperClass
表格列为Foo
和Foo1
。足够逻辑,因为SuperClass
有2个子类SubClass1
和SubClass2
,每个子类都有Foo
属性。在我们的示例中,Foo
为NULL,但Foo1
的值为int32
。所以问题不在于数据库 - 相反,我们的模型和数据库之间的链接似乎已经丢失了。鉴别器逻辑已损坏。试图找出可能出错的迹象,我们注意到了几件事:
_MigrationHistory
表 _MigrationHistory
表有一条记录:
MigrationID: 201204102350574_InitialCreate
CreatedOn: 4/10/2012 11:50:57 PM
Model: <Binary data>
ProductVersion: 4.3.1
查看其他表格时,大多数表格在迁移发生时都被清空了。只有最初种有SampleData
的表格仍未受影响。
以下是我们的理解
以下是我们的问题
Application_Start
有System.Data.Entity.Database.SetInitializer<Entities>(null);
? 编辑:看看可能出现的问题,我们注意到在这个SQL Azure tutorial中我们没有尊重的一件事:我们没有删除PersistSecurityInfo
创建数据库后,从我们的SQL Azure实体数据库连接字符串。不明白为什么地球上可能会引起这个问题,但仍然值得一提......
答案 0 :(得分:0)
没关系,找到了我们问题的原因。如果有人想知道:自从添加预处理器指令以来,我们没有进行任何Azure部署。 MS必须重新启动VM驻留的计算机,新VM使用查看数据重新创建数据库。
获得的经验:总是经常进行Azure部署。