Ich habe die Ausnahme und kann es nicht herausfinden.Einstellungen 'warf eine Ausnahme vom Typ' System.Data.SqlClient.SqlException '
Einstellungen = '((BandwidthRestriction.Models.SettingRespository) settingRespository) .settings' warf zwei Tabellen eine Ausnahme vom Typ 'System.Data.SqlClient.SqlException'
ich habe.
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; }
}
}
Und
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; }
}
}
Eine andere Tabelle
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; }
}
}
Die Struktur der Tabelle mag
[! [12] [1]] [1]
Auch ich habe den entsprechenden dbcontext als
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)
{
}
}
Im respository, ich habe
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;
}
}
In der Steuerung habe ich die DI.
[Route("api/[controller]")]
public class BandwidthController : Controller
{
private readonly ISettingRespository _settingRespository;
public BandwidthController(ISettingRespository settingRespository)
{
_settingRespository = settingRespository;
}
Allerdings, wenn ich den _settingRespository
schweben. Ich sehe die Ausnahme:
Einstellungen = '((BandwidthRestriction.Models.SettingRespository) settingRespository) .settings' warf
EDIT eine Ausnahme vom Typ 'System.InvalidOperationException':
Pro Kommentar, habe ich den Tabellennamen Schreibfehlern behoben. Der Fehler ist SqlException: Invalid column name 'FacilitySettingOverrideSettingId'
, aber ich fand eine ähnliche Frage bei stackoverflow. Vielleicht habe ich Code zuerst falsch verwendet?
Mit einem anderen Wort, die Tabelle FacilitySettingOverride, hat es nicht den Primärschlüssel. Ist es die Ursache?
EDIT-1
Per Kommentare. Ich habe die DB neu gestaltet. Ich denke, dass Setting-FacilitySettingOverride to be 1:1
[3]
Und
[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; }
}
Der neue Fehler ist
SqlException [[neu] [3]!]: Ungültiger Spaltenname 'FacilityId1'.
im Code:
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);
}
}
und
[Table("Facilities")]
public class Facility
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
Ich kann Setting
aber FacilitySettingOverride
im Kontext zu bekommen.
Gibt es eine innere Ausnahme? – tofutim
@tofutim. Keine innere Ausnahme. Nur ein rotes X. Die Ausnahme impliziert 'get { Liste settingList; mit (SettingDbContext context = new SettingDbContext()) { settingList = context.Settings.ToList(); } return settingList; } 'ist die Position des Fehlers –
ist die Tabelle Einstellungen in dB? – tofutim