Sor*_*ora 5 c# asp.net asp.net-mvc content-management-system edmx
我有一个我正在处理的新 MVC 项目,它基本上是一个我打算在其他项目中使用的 CMS,结构如下
假设我创建了一个使用我的 CMS 的 DLL 的新项目,尽管客户端需要根据附加条件向模型添加新表,但覆盖 EcomerceModel.edmx 的最佳方法是什么,以便我可以使用新表添加了表,而不会触及新创建的项目中的原始 Dll。
谢谢,
小智 1
好吧,有一个快速的解决方案,即将您的Data项目分成几个项目,以保持最低要求。
因此,如果我们以您的Data项目为例,它将分为几个类库,例如:
为了使其发挥作用,您需要切换到Code First方法,以确保您可以控制迁移和模型。(您不需要每次更新模型时 EF 都覆盖您的自定义设置,而且您需要将更新保留在代码中而不是数据库中)。
建议将模型保留在单独的程序集中,以便在其他项目中重用,而无需引用完整的数据层。
之后,Data.Core您将需要在您的应用程序中引用所有其他Data.*类库。然后,你可以DbContext像这样创建你的:
public class ECommerceDbContext : DbContext
{
public DbSet<Admin> Admins { get; set; }
/// rest of Entities
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// your Entities configurations
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您的Data图层已设置完毕并准备好在其他项目中引用。
在您想要重用当前的其他项目中,Data.Core您需要引用Data.Core(通过项目引用或 Nuget)。ECommerceDbContext然后,创建一个继承并扩展它的新类。就像是 :
public class ECommerceCMSContext : ECommerceDbContext
{
/// New Entities
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// New Entities configurations
}
}
Run Code Online (Sandbox Code Playgroud)
现在,将ECommerceCMSContext任何新表添加到当前上下文中。
PS您可以看看ASP.NET Core Identity他们正在使用类似的实现,这对您的工作非常有帮助。
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |