gpt4 book ai didi

c# - 设置'引发了类型为 'System.Data.SqlClient.SqlException' 的异常

转载 作者:行者123 更新时间:2023-11-30 16:49:01 27 4
gpt4 key购买 nike

我得到了异常,但无法弄清楚。

Settings = '((BandwidthRestriction.Models.SettingRespository)settingRespository).Settings' threw an exception of type '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)
{

}
}

在存储库中,我有

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;
}
}

在 Controller 中,我传递了 DI。

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

public BandwidthController(ISettingRespository settingRespository)
{
_settingRespository = settingRespository;
}

然而,当我将鼠标悬停在 _settingRespository 上时。我看到异常:

Settings = '((BandwidthRestriction.Models.SettingRespository)settingRespository).Settings' threw an exception of type 'System.InvalidOperationException'

编辑:

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

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

EDIT-1

根据评论。我重新设计了数据库。我认为 Setting-FacilitySettingOverride 为 1:1[![新][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: Invalid column name '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; }
}

我可以在上下文中获取 SettingFacilitySettingOverride

最佳答案

Create POCO class in EF 7 code first

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

关于c# - 设置'引发了类型为 'System.Data.SqlClient.SqlException' 的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37354780/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com