两个Razor Pages应用能否共享同一数据库并采用Code First模式?
问题解答
1. 能否构建第二个Razor Pages应用共享原应用的数据库与模型?
完全可以。只要在第二个Razor Pages应用中配置与原应用完全一致的数据库连接字符串,就能直接访问同一个数据库。模型层面,你可以复用原应用的模型类(无论是复制还是通过引用方式),实现数据的读写操作。
2. 修改模型时是否需要在两个应用间来回复制?
如果只是简单复制模型类到第二个应用,每次修改模型都得两边同步,不仅麻烦,还极易出现遗漏或不一致的情况,这显然不是合理的做法。
3. 更优方案
最靠谱的方式是抽离核心模型与数据上下文到独立类库,具体步骤如下:
- 创建一个.NET类库项目(比如命名为
ProjectPlanning.Core),把原应用中的项目模型类、DbContext(数据库上下文)以及相关数据访问逻辑全部迁移到这个类库中。 - 让原长期规划应用和新的第二个Razor Pages应用都通过项目引用(同一解决方案下)或NuGet引用这个类库。
- 两个应用各自在
Program.cs中注册DbContext,使用相同的连接字符串:builder.Services.AddDbContext<ProjectDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"))); - 所有数据库迁移操作统一在一个应用中执行(比如原应用),避免两个应用各自生成迁移脚本导致数据库结构冲突。
这种方式下,修改模型只需在类库中操作一次,两个应用会自动同步更新,彻底解决来回复制的问题,同时新应用也能只按需使用核心模型和数据访问能力,无需引入原应用的页面等无关代码。
内容的提问来源于stack exchange,提问作者Tim Eulink
相关产品推荐
相关产品推荐

