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