【发布时间】:2020-02-23 09:11:31
【问题描述】:
我在带有 SQL Server 的 MVC5 中使用 EF 代码优先迁移。 我创建了一个 post 方法,我正在从客户端发布 DTO 数据,我相信这一切都很好,但是当我尝试将数据保存到数据库时,我在外键属性上得到了这个无效的列名异常。
这是我第一次真正解决这个错误。我检查了其他问题,大多数答案都与 [ForeignKey] 数据注释有关,但我认为我以正确的方式实现了它
这是模型
public class ServiceProvider
{
public Guid Id { get; set; }
public string Name { get; set; }
public string PhoneNumber { get; set; }
public double YearsOfExperiance { get; set; }
public double AverageRank { get; set; }
public string Nationality { get; set; }
public ICollection<JobImage> JobImages { get; set; }
public ICollection<Review> Reviews { get; set; }
public ICollection<Rank> Ranks { get; set; }
public bool Active { get; set; }
[ForeignKey("Category")]
public int CategoryId { get; set; }
public Category Category { get; set; }
public bool Approved { get; set; }
}
这是控制器的 ActionResult 方法
[HttpPost]
public ActionResult AddServiceProvider(ServiceProviderDTO serviceProvider)
{
bool isInDb = _context.ServiceProviders.Any(s => s.Name == serviceProvider.Name) ? true : false;
//var serviceProviderInDb = _context.ServiceProviders.Where(s => s.Name == serviceProvider.Name).FirstOrDefault();
var newServiceProvider = new ServiceProvider();
if (isInDb == false)
{
newServiceProvider = new ServiceProvider
{
Id = Guid.NewGuid(),
Name = serviceProvider.Name,
PhoneNumber = serviceProvider.PhoneNumber,
YearsOfExperiance = serviceProvider.YearsOfExperiance,
Nationality = serviceProvider.Nationality,
CategoryId = serviceProvider.CategoryId,
Active = true,
Approved = serviceProvider.Approved == null ? false : serviceProvider.Approved.Value
};
_context.ServiceProviders.Add(newServiceProvider);
_context.SaveChanges();
}
return RedirectToAction("Index", "Home");
}
错误发生在_context.SaveChanges();
它指出CategoryId 是无效的列名
这不是我第一次使用代码优先迁移,而且我之前从未遇到过这个错误,所以我真的不知道为什么会发生这种情况!
【问题讨论】:
-
那么......
Category表的模型是什么? PK只是Id还是事实上CategoryId? -
您最近是否更改了列名?
-
@BrendanGreen 只是 ID
-
您能否转到 Management Studio 并让它为
Category表和ServiceProvider表生成/提取CREATE TABLE脚本(并包括在问题中)。 -
您是否尝试将
Category标记为virtual(例如public virtual Category Category { get; set; }
标签: c# entity-framework asp.net-mvc-5