设置’引发了’System.Data.SqlClient.SqlException’类型的exception

我得到了例外,无法弄明白。

Settings =’((BandwidthRestriction.Models.SettingRespository)settingRespository).Settings’引发了类型’System.Data.SqlClient.SqlException’的exception

我有两张桌子。

namespace BandwidthRestriction.Models { [Table("Settings")] public class Setting { [Key] public int Id { get; set; } public string Name { get; set; } public string Description { get; set; } public string DefaultValue { get; set; } public string Classification { get; set; } public virtual FacilitySettingOverride FacilitySettingOverride { get; set; } } } 

 namespace BandwidthRestriction.Models { [Table("FacilitySettingOverride")] public class FacilitySettingOverride { [Key] public int FacilityId { get; set; } public int SettingId { get; set; } public string Value { get; set; } public virtual ICollection Settings { get; set; } public virtual ICollection Facilities { get; set; } } } 

另一张表

 namespace BandwidthRestriction.Models { [Table("Facilities")] public class Facility { [Key] public int Id { get; set; } public string Name { get; set; } public ICollection FacilitySettingOverrides { get; set; } } } 

桌子的结构很喜欢

[![12] [1] [1]

我也有对应的dbcontext

  public class SettingDbContext : DbContext { public DbSet Settings { get; set; } public DbSet FacilitySettingOverride { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Data Source=11.53.63.94;Initial Catalog=AAA;User ID=sa;password=password;Application Name=XXX"); } protected override void OnModelCreating(ModelBuilder modelBuilder) { } } 

在存储库中,我有

 namespace BandwidthRestriction.Models { public class SettingRespository : ISettingRespository { public List GetAllSettings() { return Settings.ToList(); } public IEnumerable Settings { get { List settingList; using (SettingDbContext context = new SettingDbContext()) { settingList = context.Settings.ToList(); } return settingList; } } 

在控制器中,我通过了DI。

  [Route("api/[controller]")] public class BandwidthController : Controller { private readonly ISettingRespository _settingRespository; public BandwidthController(ISettingRespository settingRespository) { _settingRespository = settingRespository; } 

但是,当我hover_settingRespository 。 我看到了例外情况:

Settings =’((BandwidthRestriction.Models.SettingRespository)settingRespository).Settings’引发了类型’System.InvalidOperationException’的exception

编辑:

根据评论,我修复了表名拼写错误问题。 错误是SqlException: Invalid column name 'FacilitySettingOverrideSettingId' ,但我在stackoverflow上发现了类似的问题。 也许我错误地使用了代码?

换句话说,表FacilitySettingOverride ,它没有主键。 是原因吗?

编辑-1

每条评论。 我重新设计了数据库。 我认为Setting-FacilitySettingOverride to be 1:1 [![new] [3]] [3]

  [Table("FacilitySettingOverride")] public class FacilitySettingOverride { [Key] public int FacilityId { get; set; } public string Value { get; set; } public int SettingId { get; set; } public virtual Facility Facility { get; set; } public virtual Setting Setting { get; set; } } 

新的错误是

SqlException:列名称’FacilityId1’无效。

在代码中:

  public int GetFacilityBandwidthSetting(int facilityId) { using (SettingDbContext context = new SettingDbContext()) { var setting = context.Settings.Single(s => s.Name == SettingType.TotalBandwidth.ToString()); var value = context.FacilitySettingOverride.SingleOrDefault(x => x.FacilityId == facilityId && x.SettingId == setting.Id); if (value == null) return int.Parse(setting.DefaultValue); return int.Parse(value.Value); } } 

  [Table("Facilities")] public class Facility { [Key] public int Id { get; set; } public string Name { get; set; } } 

我可以在上下文中获取Setting但是FacilitySettingOverride

首先在EF 7代码中创建POCO类

基本上他们是同一个问题。 关键问题是创建正确的POCO类。