有没有在数据库中不删除数据库就可以改正错误
具体出错提示如下图:
导致这个问题发生的原因是因为在我们的应用程序中,更新后的Movie模型类与我们实际连接的数据库的结构并不统一(Movies数据表中并没有Rating列)。
在默认情况下,当你使用EF code-first自动创建数据库时(就好像本教程中前面所介绍过的那样),EF code-first会自动在数据库中追加数据表来使得数据库的结构与它自动生成的模型类保持同步。如果不同步,EF将会抛出一个错误。这使得在开发程序时对于错误的跟踪会变得更加容易,否则你只能在运行时发现这个错误。同步检查特性正是引起以上显示的错误的原因。
有两种方法可以解决这个错误:
让Entity Framework自动删除当前数据库,并在新的模型类的基础上重新创建该数据库。这种方法在使用一个测试数据库时对于开发来说是十分方便的,因为它允许你快速地同步修改模型与数据库。但缺点是你将丢失现存库中的数据(所以请不要将这个方法使用在实际使用中的数据库上)。修改数据库中的数据表的结构来使之与模型相匹配。这个方法的好处是可以让你保留表中的数据。你可以手工实现这一操作,或创建一个数据表修改脚本来实现这一操作。
我即修改了数据库结构也还是出错,请问是什么详细的办法,请高手对我这个新手多多指入,得以入门。
好几个晚了,就卡在这门上,多谢谢了。
16 个解决方案
#1
#2
#3
#4
http://hi.baidu.com/ablan_wang/blog/item/6f6fe5df71908d4194ee3710.html
具体错误的内容参考本网址
希望高手给予解答。
具体错误的内容参考本网址
希望高手给予解答。
#5
看不到错误提示,无能为力额。。。。
#6
http://hi.baidu.com/ablan_wang/blog/item/6f6fe5df71908d4194ee3710.html
错误的提示图片,上这个网址可以看到。因为图片引用BAIDU的,因此可能会打不开。
所以可以上上面这个网址看具体的原因
错误的提示图片,上这个网址可以看到。因为图片引用BAIDU的,因此可能会打不开。
所以可以上上面这个网址看具体的原因
#7
其实就是模型类改变后如何下理
如:
我新添加了 public string Rating { get; set; }
然后就会导至出错了,
具体提示是:
The model backing the 'TexERPDBContext' context has changed since the database was created. Either manually delete/update the database, or call Database.SetInitializer with an IDatabaseInitializer instance. For example, the DropCreateDatabaseIfModelChanges strategy will automatically delete and recreate the database, and optionally seed it with new data.
但是我不想删除数据后,重建,而是想保留原来数据。或者说在表的字段上添加上新添加的就可以。
实际操作中,模型的字段和数据库的字段我分别添加了,并且完全一样,但是还是提示出错。
即使我减少这个模型里的字段也会出错,因此弱弱的问下,改变模型后如何方便,可以不重建数据库就可以解决问题的。
请高手给我指点一下,一直卡在这里入不了门。
如:
using System;
using System.Data.Entity;
namespace TexERP.Models
{
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
public string ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
public string Rating { get; set; }
}
public class TexERPDBContext : DbContext
{
public DbSet<Movie> Movies { get; set; }
}
}
我新添加了 public string Rating { get; set; }
然后就会导至出错了,
具体提示是:
The model backing the 'TexERPDBContext' context has changed since the database was created. Either manually delete/update the database, or call Database.SetInitializer with an IDatabaseInitializer instance. For example, the DropCreateDatabaseIfModelChanges strategy will automatically delete and recreate the database, and optionally seed it with new data.
但是我不想删除数据后,重建,而是想保留原来数据。或者说在表的字段上添加上新添加的就可以。
实际操作中,模型的字段和数据库的字段我分别添加了,并且完全一样,但是还是提示出错。
即使我减少这个模型里的字段也会出错,因此弱弱的问下,改变模型后如何方便,可以不重建数据库就可以解决问题的。
请高手给我指点一下,一直卡在这里入不了门。
#8
#9
是不是字段类型不一样呀,模型和数据库要对应的
#10
可以确定,类型也是一模一样的。
#11
在Global的Application_Start()里面加上Database.SetInitializer<MyContext>(null);
#12
我也碰上这个问题了。
#13
按教程里改的,怎么会不通过呢。太奇怪了
#14
#15
在Global的Application_Start()里面加上Database.SetInitializer<MyContext>(null); 这个能解决问题,试试吧
#16
在Application_Start()里面加上这句:
//当数据库结构改变时,需要将数据库删除再创建
Database.SetInitializer(new DropCreateDatabaseAlways<UserContext>());
UserContext是数据上下文这个类名
//当数据库结构改变时,需要将数据库删除再创建
Database.SetInitializer(new DropCreateDatabaseAlways<UserContext>());
UserContext是数据上下文这个类名
#1
#2
#3
#4
http://hi.baidu.com/ablan_wang/blog/item/6f6fe5df71908d4194ee3710.html
具体错误的内容参考本网址
希望高手给予解答。
具体错误的内容参考本网址
希望高手给予解答。
#5
看不到错误提示,无能为力额。。。。
#6
http://hi.baidu.com/ablan_wang/blog/item/6f6fe5df71908d4194ee3710.html
错误的提示图片,上这个网址可以看到。因为图片引用BAIDU的,因此可能会打不开。
所以可以上上面这个网址看具体的原因
错误的提示图片,上这个网址可以看到。因为图片引用BAIDU的,因此可能会打不开。
所以可以上上面这个网址看具体的原因
#7
其实就是模型类改变后如何下理
如:
我新添加了 public string Rating { get; set; }
然后就会导至出错了,
具体提示是:
The model backing the 'TexERPDBContext' context has changed since the database was created. Either manually delete/update the database, or call Database.SetInitializer with an IDatabaseInitializer instance. For example, the DropCreateDatabaseIfModelChanges strategy will automatically delete and recreate the database, and optionally seed it with new data.
但是我不想删除数据后,重建,而是想保留原来数据。或者说在表的字段上添加上新添加的就可以。
实际操作中,模型的字段和数据库的字段我分别添加了,并且完全一样,但是还是提示出错。
即使我减少这个模型里的字段也会出错,因此弱弱的问下,改变模型后如何方便,可以不重建数据库就可以解决问题的。
请高手给我指点一下,一直卡在这里入不了门。
如:
using System;
using System.Data.Entity;
namespace TexERP.Models
{
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
public string ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
public string Rating { get; set; }
}
public class TexERPDBContext : DbContext
{
public DbSet<Movie> Movies { get; set; }
}
}
我新添加了 public string Rating { get; set; }
然后就会导至出错了,
具体提示是:
The model backing the 'TexERPDBContext' context has changed since the database was created. Either manually delete/update the database, or call Database.SetInitializer with an IDatabaseInitializer instance. For example, the DropCreateDatabaseIfModelChanges strategy will automatically delete and recreate the database, and optionally seed it with new data.
但是我不想删除数据后,重建,而是想保留原来数据。或者说在表的字段上添加上新添加的就可以。
实际操作中,模型的字段和数据库的字段我分别添加了,并且完全一样,但是还是提示出错。
即使我减少这个模型里的字段也会出错,因此弱弱的问下,改变模型后如何方便,可以不重建数据库就可以解决问题的。
请高手给我指点一下,一直卡在这里入不了门。
#8
#9
是不是字段类型不一样呀,模型和数据库要对应的
#10
可以确定,类型也是一模一样的。
#11
在Global的Application_Start()里面加上Database.SetInitializer<MyContext>(null);
#12
我也碰上这个问题了。
#13
按教程里改的,怎么会不通过呢。太奇怪了
#14
#15
在Global的Application_Start()里面加上Database.SetInitializer<MyContext>(null); 这个能解决问题,试试吧
#16
在Application_Start()里面加上这句:
//当数据库结构改变时,需要将数据库删除再创建
Database.SetInitializer(new DropCreateDatabaseAlways<UserContext>());
UserContext是数据上下文这个类名
//当数据库结构改变时,需要将数据库删除再创建
Database.SetInitializer(new DropCreateDatabaseAlways<UserContext>());
UserContext是数据上下文这个类名