2013-03-28 47 views
0

我正在使用实体框架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构建的对象。我也尝试删除并重建表格并重新生成代码,并更改了字段名称。这里发生了什么?

+0

愚蠢的问题:数据库中的表是否有匹配的列?对不起,不得不问。 – Moho 2013-03-28 04:15:22

+0

是的,它的确如此。我做了“数据库优先”,所以表首先被创建,并且我从表中生成了类。该字段当前为varchar 12且可为空(SQL Server 2008)。原来,它不是可以空的,我的插入失败,因为这个领域。 – DZx 2013-03-28 04:22:11

+0

所以你使用EDMX文件?检查EDMX中的映射,使概念模型的字段映射到存储模型的字段 – Moho 2013-03-28 04:24:52

回答

0

这个问题就走了它自己的,但这里是我认为它造成的:

我们使用一个数据库第一种方法。数据库中的基础表已更改,但EDMX模型未刷新。即使这个特定的领域没有改变,它似乎给了这种奇怪的行为,直到我们从数据库刷新我们的模型。