【问题标题】:The argument 'nameOrConnectionString' cannot be null, empty or contain only white space in Entity Framework project实体框架项目中的参数“nameOrConnectionString”不能为空、空或仅包含空格
【发布时间】:2020-01-08 16:24:06
【问题描述】:

我在尝试初始化 DBContext 时立即收到此错误 简短背景:我正在使用一个共享 dll,其中包含所有实体的 DBcontext 实体框架,这在我的项目中与 enityframework.dll 等一起引用。

我可以看到其中的所有类,这是 Model.dll 中的代码

namespace Model
{
    public class BSysDbContext : DbContext
    {
        public BSysDbContext(bool proxyCreationEnabled = true);

        public virtual DbSet<TaskResource> TaskResources { get; set; }
        public virtual DbSet<TaskOrder> TaskOrders { get; set; }
        public virtual DbSet<TaskMessage> TaskMessages { get; set; }
        public virtual DbSet<TaskEvent> TaskEvents { get; set; }
etc

在我的代码中,我试图检索数据,但在点击“_context = new BSysDbContext();”时出现上述错误

    public partial class ChangeSupervisor : DevExpress.XtraEditors.XtraForm
    {


        BSysDbContext _context;
        public ChangeSupervisor()
        {
            InitializeComponent();
            _context = new BSysDbContext();

        }
    }

我的连接字符串是:

  <connectionStrings>
    <add name="BSysDbContext" connectionString="metadata=res://Model.dll/BSysDbModel.csdl|
                                                         res://Model.dll/BSysDbModel.ssdl|
                                                         res://Model.dll/BSysDbModel.msl
                                                         ;provider=System.Data.SqlClient;provider connection string=';data source=DESKTOP-5T9EDLN;initial catalog=BuilderSysDB_DEV;user id=llduser;password=P@ssw0rd1;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework';" providerName="System.Data.EntityClient" />
         </connectionStrings> 

不,我在连接字符串中放什么并不重要,它似乎甚至不知道该字符串存在。 根据我用谷歌搜索的内容,我不需要这样的model.dll

public class BSysDbContext : DbContext
    {
      public BSysDbContext ()
            : base("name=BSysDbContext")
        {
        }
    }

因为名字是一样的。

注意,我无权访问 DLL 的源代码,否则我会进行此更改。 我需要知道的是......是缺少“公共BSysDbContext() : base("name=BSysDbContext") " 在 DLL 中是什么导致了我的错误消息或者我在这里遗漏了什么?

连接字符串在我看来没问题,我创建了另一个空白项目并将其用作创建此项目的示例

感谢任何建议

【问题讨论】:

    标签: entity-framework-6


    【解决方案1】:

    好的,所以经过漫长的试错期,解决方案(对于实体框架和迁移 dll 的新手,我显然不知道)是,即使保存实体模型的单独 dll 已经获得上下文和定义,您还需要在项目中拥有自己的 dbcontext 类以及所有表

     public class BSysDbContext : DbContext
        {
            public BSysDbContext()
                        : base("Name=BSysDbContext")
            {
    
            }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                modelBuilder.Entity<tblJob>().ToTable("tblJob", "Entity");
                modelBuilder.Entity<TaskOrder>().ToTable("TaskOrder", "Entity");
                modelBuilder.Entity<Project>().ToTable("Project", "Entity");
                modelBuilder.Entity<Order>().ToTable("Order", "Entity");
                modelBuilder.Entity<OrderCode>().ToTable("OrderCode", "Entity");
                modelBuilder.Entity<ProjectTask>().ToTable("ProjectTask", "Entity");
                modelBuilder.Entity<Model.Task>().ToTable("Task", "Entity");
                modelBuilder.Entity<tblSupervisor>().ToTable("tblSupervisor", "Entity");
                modelBuilder.Entity<tblSupplier>().ToTable("tblSupplier", "Entity");
                modelBuilder.Entity<JobProject>().ToTable("JobProject", "Entity");
                base.OnModelCreating(modelBuilder);
            }
            public virtual DbSet<tblJob> Jobs { get; set; }
            public virtual DbSet<TaskOrder> TaskOrders { get; set; }
            public virtual DbSet<Project> Projects { get; set; }
            public virtual DbSet<Order> Orders { get; set; }
    etc....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多