gpt4 book ai didi

c# - 覆盖 DLL 中的 DataModel

转载 作者:行者123 更新时间:2023-12-03 17:09:42 24 4
gpt4 key购买 nike

我有一个我正在处理的新 MVC 项目,它基本上是一个我打算在其他项目中使用的 CMS,结构如下
enter image description here
假设我创建了一个使用我的 CMS 的 DLL 的新项目,尽管客户端需要根据附加条件向模型添加新表,但覆盖 EcomerceModel.edmx 的最佳方法是什么,以便我可以使用新表添加表而不触及新创建的项目中的原始 Dll。
谢谢,

最佳答案

嗯,对此有一个快速的解决方案,那就是分割您的 Data项目到几个项目中,以使其保持在最低要求。
所以,如果我们把你的 Data以项目为例,它将被分成几个类库,例如:

  • Data.Models(仅包含用于抽象目的的数据模型)。
  • Data.Core(主要数据项目)。
  • Data.Common(可选)
  • 数据助手(可选)

  • 为了使这可能起作用,您需要切换到 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
    }
    }
    现在,您的 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
    }
    }
    现在,与 ECommerceCMSContext 一起工作将任何新表添加到当前上下文。
    附言你可以看看 ASP.NET Core Identity 他们正在使用类似的实现,这对您的工作非常有帮助。

    关于c# - 覆盖 DLL 中的 DataModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65938243/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com