0

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

4

1 回答 1

0

这个问题自行消失了,但我认为这是造成它的原因:

我们使用的是数据库优先方法。数据库中的基础表已更改,但 EDMX 模型未刷新。尽管这个特定字段没有改变,但在我们从数据库中刷新我们的模型之前,它似乎给出了这种奇怪的行为。

于 2013-08-08T17:28:23.083 回答