Я получил исключение и не могу понять это.Настройки «выбрасывают исключение типа« System.Data.SqlClient.SqlException »
Настройки = '((BandwidthRestriction.Models.SettingRespository) settingRespository) .settings' сгенерировала исключение типа 'System.Data.SqlClient.SqlException'
У меня есть две таблицы.
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<Setting> Settings { get; set; }
public virtual ICollection<Facility> Facilities { get; set; }
}
}
Другая таблица
namespace BandwidthRestriction.Models
{
[Table("Facilities")]
public class Facility
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public ICollection<FacilitySettingOverride> FacilitySettingOverrides { get; set; }
}
}
структуры таблицы любит
[! [12] [1]] [1]
Также я соответствуют dbcontext как
public class SettingDbContext : DbContext
{
public DbSet<Setting> Settings { get; set; }
public DbSet<FacilitySettingOverride> 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)
{
}
}
В respository, у меня
namespace BandwidthRestriction.Models
{
public class SettingRespository : ISettingRespository
{
public List<Setting> GetAllSettings()
{
return Settings.ToList();
}
public IEnumerable<Setting> Settings
{
get
{
List<Setting> 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;
}
Однако, когда я наматываю _settingRespository
. Я вижу исключение:
Настройки = '((BandwidthRestriction.Models.SettingRespository) settingRespository) .settings' бросил исключение типа '' System.InvalidOperationException
EDIT:
В комментарии я исправил проблему с орфографической ошибкой. Ошибка SqlException: Invalid column name 'FacilitySettingOverrideSettingId'
, но я нашел аналогичный вопрос на stackoverflow. Возможно, я использовал код сначала неправильно?
В другом слове, таблице FacilitySettingOverride, он не имеет первичного ключа. Это причина?
EDIT-1
Per комментарии. Я переработал БД. Я думаю, что Setting-FacilitySettingOverride to be 1:1
[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 [[новый] [3]]: Недопустимое имя столбца '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
в контексте.
Есть ли внутреннее исключение? – tofutim
@tofutim. Нет внутреннего исключения. Просто красный X. Исключение подразумевалось 'get { Список settingList; using (SettingDbContext context = new SettingDbContext()) { 10 setList = context.Settings.ToList(); } return settingList; } '- это местоположение ошибки –
- таблица настроек в дБ? – tofutim