2016-05-20 16 views
3

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.

+0

Gibt es eine innere Ausnahme? – tofutim

+0

@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 –

+0

ist die Tabelle Einstellungen in dB? – tofutim

Antwort

Verwandte Themen