我正在使用实体框架 4.1。一个没有外键的简单表被映射到一个对象(TransmissionHistory 表和对象)。然而,当我保存时,其中一个字段为 NULL,尽管该值已明确设置,并且在浏览代码和编写时我可以看到它到日志。(字段名称是 WhoDidIt。)
在进一步调查中,我将对象中的自动属性替换为 Get 和 Set 以及私有支持属性。事实证明,当执行数据库 Save 时,执行了其他属性的“Get”,但不是我的问题 WhoDidIt 属性。
这是类定义的一部分:
public partial class TransmissionHistory
{
private string _id;
private string _transmissonTable;
private string _whoDidIt;
public string Id
{
get { return _id; }
set { _id = value; }
}
public string TransmissionTable
{
get { return _transmissonTable; }
set { _transmissonTable = value; }
}
public string WhoDidIt
{
get { return _whoDidIt; }
set { _whoDidIt = value; }
}
这是创建和保存对象的代码。
TransmissionHistory trxHist = new TransmissionHistory();
trxHist.Id = guid.ToString();
trxHist.TransmissionTable = "MyTransmission";
trxHist.WhoDidIt = "Me";
_db.TransmissionHistories.Add(trxHist);
_db.SaveChanges();
当我在其中设置断点时,很明显数据库 SaveChanges 正在访问其他两个属性的 Get 方法,而不是 WhoDidIt。所以即使 trxHist 对象在 WhoDidIt 中有一个值,它也总是作为 NULL 保存到数据库中。这是作为“数据库优先”构建的,Visual Studio 构建了该对象。我还尝试删除和重建表并重新生成代码,并更改了字段名称。这里发生了什么?