实体框架拒绝为新列保存价值

时间:2013-12-18 16:42:12

标签: entity-framework

我刚刚更改了数据库,向表中添加了一个新列并将其设置为外键。我们首先使用EF4数据库,所以我从数据库更新了模型,将我的新字段添加到DTO中,一切看起来都很棒,直到我尝试将数据保存到它。

新列名为DiaryEventId,因为它是FK,所以对象上还有一个名为DiaryEvent的虚拟属性。这是代码的样子:

    public void SaveDocument(Guid CaseId, string diaryText, string ActivityType)
    {
        Guid eventTypeId = RepositoryHelper.GetDiaryEventFromCache("Document Uploaded", _commonQueryContext);
        //this wanders off and created a diary event object, adds it to 
        //the context and returns its ID
        Guid diaryId = RepositoryHelper.AuditEvent(CaseId, diaryText, commonUpdateContext);

        Entities.DocumentMetadata docData = new Entities.DocumentMetadata()
        {
            Id = Guid.NewGuid();,
            ActivityType = activityType,
            DiaryEventId = diaryId
        };

        _commonUpdateContext.DocumentMetadatas.Add(docData);
        _commonUpdateContext.SaveChanges();
    }

这会编译并运行正常,当您单步执行它时,它似乎按预期运行 - 在对象上生成并设置diaryId。但在数据库中,它总是显示为空。

我在添加日记事件后尝试调用SaveChanges(以确保密钥有连接的东西)并且我尝试将实际的DiaryEvent对象添加到虚拟属性而不仅仅是ID - 两者都具有相同的效果。

当我看到SQL事件探查器中发生的事情时,我可以看到INSERT语句完全忽略了我的新列 - 它根本没有列在插入列中。

真的不知道发生了什么事。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

尝试将对象添加到上下文后进行修改,就像测试一样。

    _commonUpdateContext.DocumentMetadatas.Add(docData);

    Entities.DocumentMetadata docData = new Entities.DocumentMetadata()
    {
        Id = Guid.NewGuid();,
        ActivityType = activityType,
        DiaryEventId = diaryId
    };

    _commonUpdateContext.SaveChanges();

或者这可能是一个错字?

Entities.DocumentMetadata docData = new Entities.DocumentMetadata()
    {
        Id = Guid.NewGuid();,  <-------------typo?

除此之外,还需要一些关于如何映射实体的信息。 DiaryEvent和DocumentMetadata之间是否有导航属性?密钥是否定义为可空(我假设它是)? ActivityType是否正确持久化?