我正在使用实体框架4.1。一个没有外键的简单表映射到一个对象(TransmissionHistory表和对象)。然而,当我保存时,其中一个字段是NULL,尽管值已经清楚地设置好了,并且在遍历代码和写入时我可以看到它到日志。 (字段名称是WhoDidIt。)实体框架不执行获取每个属性
在进一步调查中,我用Get和Set以及私有支持属性替换了对象中的自动属性。事实证明,当数据库保存被执行时,其他属性的“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构建的对象。我也尝试删除并重建表格并重新生成代码,并更改了字段名称。这里发生了什么?
愚蠢的问题:数据库中的表是否有匹配的列?对不起,不得不问。 – Moho 2013-03-28 04:15:22
是的,它的确如此。我做了“数据库优先”,所以表首先被创建,并且我从表中生成了类。该字段当前为varchar 12且可为空(SQL Server 2008)。原来,它不是可以空的,我的插入失败,因为这个领域。 – DZx 2013-03-28 04:22:11
所以你使用EDMX文件?检查EDMX中的映射,使概念模型的字段映射到存储模型的字段 – Moho 2013-03-28 04:24:52