【发布时间】:2019-12-17 00:58:19
【问题描述】:
我已经在这个问题上停留了 2 天 :(
我正在尝试为我和妻子做“家庭预算服务”。但是,当我尝试将更改保存到我的数据库时,我仍然收到“SqlException:无效的列名'BillingTypes_Id'”。我见过很多类似标题的案例,主要是:
Invalid Column name when using savechanges() in entity framework
我的问题发生在_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; }
}
BillingsController:
[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 { 获取;放; }
-
Sayahimad - 不,答案如下。 Altaf - 我使用字节,因为我不需要大的类型值。
标签: c# asp.net-mvc entity-framework