关于Entity Framework的问题

码农の视界 2011-12-02 11:12:15
使用EF code-first自动创建的数据库,当我的模型发生改变时,如何自动更新表结构,从而保持原数据库的内容。
...全文
98 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
码农の视界 2011-12-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 haa17 的回复:]

好像只能这样引用 1 楼 findcaiyzh 的回复:

好像只能新建数据库。
[/Quote]

那后期需要增减字段不是很痛苦啊。。。
  • 打赏
  • 举报
回复
其实很显然,完全可以用代码升级数据库,而且也只能用代码去升级数据库。不可能在新程序中去重建什么数据库;至于说不知道有“维护中有很多用户的数据库的版本各不相同”这种需求,更是EF的一个缺陷。
  • 打赏
  • 举报
回复
EF远远没有考虑到升级数据库问题,这方面开发EF的程序员的观念必须多数据库编程程序员“落后了20年”。
  • 打赏
  • 举报
回复
你可以把每一次修改数据库结构的ddl语句(t-sql语句)放到文件里,并且为每一个文件(文件名)编一个版本号。然后你的程序启动运行时自动查询这些文件有多少版本,与数据库中保存的“最后一次升级版本号”比较,然后依次调用升级Sql语句。

这对于生产发布了很多程序的项目尤其重要。比如有1000个发布,你的源代码假设从1.0升级到了8.5版本,可是这1000个发布中可能好几十种版本不一定同步升级。所以你需要让它们运行最新8.5版本的程序时自动升级数据库,而不是手动一个一个去升级1000个数据库。
Specialaspnet 2011-12-03
  • 打赏
  • 举报
回复
所以了,最好不要用,直接把数据库生成实体数据模型啊
haa17 2011-12-02
  • 打赏
  • 举报
回复
好像只能这样[Quote=引用 1 楼 findcaiyzh 的回复:]

好像只能新建数据库。
[/Quote]
tinghoward 2011-12-02
  • 打赏
  • 举报
回复
没有办法保留原有数据库的,可以把一些基础数据写成代码,每次重建数据库时自动添加基础数据。如:
public class DbInitializer : DropCreateDatabaseAlways<MyContext>
//public class DbInitializer : DropCreateDatabaseIfModelChanges<MyContext>
{
protected override void Seed(MyContext context)
{
var user = new User { UserName = "admin", UserPwd = "admin", Role = 1 };
context.Users.Add(user);
context.SaveChanges(); }
}
在global.ascx中:
protected void Application_Start()
{
……
Database.SetInitializer<MyContext>(new DbInitializer());
……
}
宝_爸 2011-12-02
  • 打赏
  • 举报
回复
好像只能新建数据库。

62,046

社区成员

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

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

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

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