c# - 添加和保存新记录返回 SqlException: Invalid column name 'BillingTypes_Id'
问题描述
我已经在这个问题上停留了 2 天:(
我正在尝试为我和妻子做“家庭预算服务”。但是,当我尝试将更改保存到我的数据库时,我仍然收到“SqlException:无效的列名'BillingTypes_Id'”。我见过很多类似标题的案例,主要是:
我的问题发生在_context.SaveChanges();
使用 VS 2017,EF 6.1.3
视图模型:
public class BillingViewModel
{
public IEnumerable<BillingTypes> BillingTypes { get; set; }
public int Id { get; set; }
public DateTime TransactionDate { get; set; }
[Display(Name = "BillingTypes")]
[Required]
public int BillingTypesId { get; set; }
[Required(ErrorMessage = "Please enter cost.")]
public double Cost { get; set; }
public BillingViewModel(BillingTransaction billingTransaction)
{
Id = billingTransaction.Id;
TransactionDate = billingTransaction.TransactionDate;
BillingTypesId = billingTransaction.BillingTypesId;
Cost = billingTransaction.Cost;
}
public BillingViewModel()
{
Id = 0;
TransactionDate = DateTime.Now;
Cost = 0;
}
模型:
public class BillingTransaction
{
public int Id { get; set; }
public BillingTypes BillingTypes { get; set; }
public DateTime TransactionDate { get; set; }
[Display(Name = "BillingTypes")]
[Required]
public byte BillingTypesId { get; set; }
[Required(ErrorMessage = "Please enter cost.")]
public double Cost { get; set; }
}
public class BillingTypes
{
[Required]
public int Id { get; set; }
public string Name { get; set; }
}
帐单控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Save(BillingTransaction billingTransaction)
{
if (!ModelState.IsValid)
{
var types = _context.BillingTypes.ToList();
var viewModel = new BillingViewModel
{
BillingTypes = types
};
return View("BillingForm", viewModel);
}
if (billingTransaction.Id == 0)
_context.BillingTransactions.Add(billingTransaction);
else
{
var transactionInDb = _context.BillingTransactions.Single(b => b.Id ==
billingTransaction.Id);
transactionInDb.Id = billingTransaction.Id;
transactionInDb.TransactionDate = billingTransaction.TransactionDate;
transactionInDb.BillingTypesId = billingTransaction.BillingTypesId;
transactionInDb.Cost = billingTransaction.Cost;
}
_context.SaveChanges();
return RedirectToAction("Index", "Billings");
}
Billings 交易表结构:(包含 id、datetime、cost、billingtypeId)
[画面][1]:https ://i.stack.imgur.com/dyLZk.png
计费类型表结构:(包含 id、name)。例如:(1,“酒精”)
解决方案
在模型的 BillingTypesId 属性之上,添加这个装饰器:
[ForeignKey("BillingTypes ")]
您的最终代码应如下所示:
[Display(Name = "BillingTypes")]
[Required]
[ForeignKey("BillingTypes ")]
public byte BillingTypesId { get; set; }
这样 EF 将知道 BillingTypesId 是 BillingTypes 的外键。
推荐阅读
- python - 为小时数据添加日期列
- three.js - 如何沿其在three.js中指向的方向向前移动3d对象
- python-3.x - 无法在 linux 上的 docker 上部署项目
- javascript - 返回 IF ELSE IF 语句的函数
- jenkins - Jenkins 并行阶段忽略 when 语句
- reactjs - 使用 Promise.all 的多个 API 调用可以很好地在控制台中显示结果,但状态出现问题
- google-sheets - SyntaxError: Unexpected token < in JSON at position 0 (line 64, file "Instagram Automation") on a previous working code
- java - 在java中使用spark(SparkSQL)读写固定长度的平面文件(不是scala,不是python)
- python - Python Concurrent.futures CPU 使用率查询
- java - 使用 lambda 排序列表和自定义比较器类不起作用