CodeFirst数据库重建问题,懂的进

livelymoon 2013-12-23 10:41:42

public class UserModel
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ClassModel UserClass { get; set; }
}

public class ClassModel
{
public int ID { get; set; }
public string ClassName { get; set; }
public virtual List<UserModel> classUser { get; set; }
}

public class myDBContext : DbContext
{

public DbSet<UserModel> UserModels { get; set; }
public DbSet<ClassModel> ClassModels { get; set; }
}

public class myDBContextInit : CreateDatabaseIfNotExists<myDBContext>
{
protected override void Seed(myDBContext DB)
{
ClassModel class1 = new ClassModel { ClassName = "Class1" };
DB.ClassModels.Add(class1);
DB.UserModels.Add(new UserModel { Name = "User1", UserClass = class1 });
DB.UserModels.Add(new UserModel { Name = "User2", UserClass = class1 });
DB.SaveChanges();
}
}


Global.asax appstart

Database.SetInitializer(new myDBContextInit());


第一次运行时候创建了 LocalDB,然后,我手动删除了 app_data下面的mdf数据库文件,再重新运行app,
没有自动重建mdf文件,而是报错

Cannot attach the file '\App_Data\Web.myDBContext.mdf' as database 'Web.myDBContext'.

按理我继承 CreateDatabaseIfNotExists 应该是会重新创建的!

Default.aspx页面

myDBContext DB = new myDBContext();
foreach (ClassModel c in DB.ClassModels.ToList())
{
Response.Write("c:"+c.ClassName);
foreach (UserModel u in c.classUser)
{
Response.Write("<br />---u:" + u.Name);
}
}
...全文
242 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
请问下最后是怎么解决的。。。。 ::>_<::
  • 打赏
  • 举报
回复
I've found solution. So deleting the file from Visual Studio was a dumb idea. SQL still has it registered. Fire up MS Sql Management Tool, connect to the server in my case (local)\v11.0 You will see the database, still exists, delete it, you will get an error. The file doesn't exist. Refresh and its gone from SQL. Now run your code again and all is good. So delete the DB from the management tool not visual studio. reference:http://stackoverflow.com/questions/16381418/an-exception-occurred-while-initializing-the-database 就是删掉文件之后,应该在SQL SERVER的management tool里面连接(local)\v11.0,查看建立的数据库,双击会提示文件不存在,然后点删除会提示有问题,再刷新数据库就自动删掉了,再回去VS2013上运行程序就可以重建数据库了。
livelymoon 2013-12-24
  • 打赏
  • 举报
回复
@webdiyer http://pan.baidu.com/share/link?shareid=1697330141&uk=1528043962 项目文件在这里 可以下载下来看看,直接F5就行
webdiyer 2013-12-24
  • 打赏
  • 举报
回复
引用 3 楼 livelymoon 的回复:
[quote=引用 2 楼 webdiyer 的回复:] 看下这篇教程:http://msdn.microsoft.com/en-us/data/jj591621.aspx
感谢大哥的回复,场景有点不一样,我平时更新数据是用Migrations,但是现在还没用到这一步。 我的场景是这样的,我在vs上创建了用CodeFirst第一次创建了数据库成功,我建立了很多测试数据,现在要把代码移交给其他部门,所以我copy了项目给他们(除了APP_DATA这个文件夹,因为里面有我的私人数据),我想他们运行项目的时候第一次就会创建一个新的数据库了!但我copy了给他们,他们第一次运行一直报无法找到 app_data/xx.mdf 文件,按理我继承了CreateDatabaseIfNotExists ,项目找不到数据库应该会自动重建的,现在不会自动重建,想找出问题在哪里。。。。[/quote] 你是怎么用的?看看这个帖子: http://stackoverflow.com/questions/5414130/entity-framework-code-first-isnt-creating-the-database
webdiyer 2013-12-23
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
知道codefirst,但从来没用过。。。。。 要DDD也没必要codefirst吧。。。。
livelymoon 2013-12-23
  • 打赏
  • 举报
回复
引用 2 楼 webdiyer 的回复:
看下这篇教程:http://msdn.microsoft.com/en-us/data/jj591621.aspx
感谢大哥的回复,场景有点不一样,我平时更新数据是用Migrations,但是现在还没用到这一步。 我的场景是这样的,我在vs上创建了用CodeFirst第一次创建了数据库成功,我建立了很多测试数据,现在要把代码移交给其他部门,所以我copy了项目给他们(除了APP_DATA这个文件夹,因为里面有我的私人数据),我想他们运行项目的时候第一次就会创建一个新的数据库了!但我copy了给他们,他们第一次运行一直报无法找到 app_data/xx.mdf 文件,按理我继承了CreateDatabaseIfNotExists ,项目找不到数据库应该会自动重建的,现在不会自动重建,想找出问题在哪里。。。。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧