我刚刚更改了数据库,向表中添加了一个新列并将其设置为外键。我们首先使用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语句完全忽略了我的新列 - 它根本没有列在插入列中。
真的不知道发生了什么事。有什么想法吗?
答案 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是否正确持久化?