Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从数据库中匹配表和架构名称?_C#_Database_Entity Framework - Fatal编程技术网

C# 如何从数据库中匹配表和架构名称?

C# 如何从数据库中匹配表和架构名称?,c#,database,entity-framework,C#,Database,Entity Framework,数据库中我的表的名称是abc.Company,其中abc是一个模式。如何创建模型类以使名称与数据库中的表名匹配?我已经做了如下描述,但它无法从数据库返回任何记录。控制器从数据库中提供0条记录 有什么想法吗 CompanyController.cs public ActionResult CompanyDetails() { IList<AddCompanyViewModel> viewModels = new List<AddCompanyViewModel>()

数据库中我的表的名称是abc.Company,其中abc是一个模式。如何创建模型类以使名称与数据库中的表名匹配?我已经做了如下描述,但它无法从数据库返回任何记录。控制器从数据库中提供0条记录

有什么想法吗

CompanyController.cs

public ActionResult CompanyDetails()
{
    IList<AddCompanyViewModel> viewModels = new List<AddCompanyViewModel>();

    var companies = db.Companies.ToList<Company>();

    foreach (var company in companies)
    {
         viewModels.Add(new AddCompanyViewModel
         {
             CompanyId=company.CompanyId,
             CompanyCode = company.CompanyCode,
             CompanyName = company.CompanyName,
             IsCompanyActive = company.Active,
             CreatedOn = company.CreatedDate
         });
    }

    return View(viewModels);
}
DataAccessLayer类:

using MiJack.Web.ProjectAdmin.Entities;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;

namespace MiJack.Web.ProjectAdmin.DataAccessLayer
{
   public class ProjectAdminDAL:DbContext
   {
      public ProjectAdminDAL() : base("ProjectAdmin")
      {
  
      }
        private static IDictionary<string, string> entitySetNames { get; set; }
        public DbSet<Company> Companies { get; set; }

        
        static ProjectAdminDAL()
        {
            // A dictionary that stores a mapping between entity objects (e.g. Vehicle) and
            // DbSets (e.g. Vehicles).
            //
            // This allows us to have a single Add method in Repository.cs that adds entities
            // to the object context by the DbSet name
            // Format
            //
            // { Entity, DbSet }
            // e.g.
            // { "Lock", "Locks" }
            ProjectAdminDAL.entitySetNames = new Dictionary<string, string>{
                {"Company", "Companies"},
            };

        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }

        public System.Data.Entity.DbSet<MiJack.Web.ProjectAdmin.ViewModels.AddCompanyViewModel> 
        AddCompanyViewModels { get; set; }
    }
}
使用MiJack.Web.ProjectAdmin.Entities;
使用System.Collections.Generic;
使用System.Data.Entity;
使用System.Data.Entity.ModelConfiguration.Conventions;
命名空间MiJack.Web.ProjectAdmin.DataAccessLayer
{
公共类ProjectAdminDAL:DbContext
{
publicprojectadmindal():base(“ProjectAdmin”)
{
}
私有静态IDictionary entitySetNames{get;set;}
公共数据库集公司{get;set;}
静态ProjectAdminDAL()
{
//存储实体对象(如车辆)与实体对象之间映射的字典
//数据库集(如车辆)。
//
//这允许我们在Repository.cs中有一个添加实体的添加方法
//通过DbSet名称将其添加到对象上下文
//格式
//
//{实体,DbSet}
//例如。
//{“锁”,“锁”}
ProjectAdminDAL.entitySetNames=新字典{
{“公司”,“公司”},
};
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
}
public System.Data.Entity.DbSet
AddCompanyViewModels{get;set;}
}
}
您可以添加一个属性来定义目标架构:

[Table("Company", Schema = "abc"]
public class Company
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int CompanyId { get; set; } 


我已经试过了,但它给了我这个错误。“自创建数据库以来,支持“项目管理”上下文的模型发生了变化。请考虑使用代码第一迁移来更新数据库()。“你正在做代码第一数据库吗?”如果是:您是否更改了数据库中的模式?如果是这样,请回滚手动更改,添加属性,创建迁移并更新数据库。基本上,这个错误表示定义的数据库与上一个已知的状态不匹配,它抛出了一个错误。我没有更改数据库中的模式。我所做的是按照您的建议添加了table属性,并添加了Database.SetInitializer(null);在global.asax.cs中的应用程序_Start()方法中,它成功了!
[Table("Company", Schema = "abc"]
public class Company
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int CompanyId { get; set; }