時在代碼中設置空ID的抱怨讓我們假設下面的代碼操作的一個DataContext實體框架:當實體ID的SaveChanges
void Context_SavingChanges(object sender, EventArgs e)
{
IEnumerable<ObjectStateEntry> objectStateEntries =
from ose in this.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Deleted)
where ose.Entity != null
select ose;
foreach (ObjectStateEntry entry in objectStateEntries)
{
foreach (var field in entry.CurrentValues.DataRecordInfo.FieldMetadata)
{
var guid = Guid.NewGuid();
AuditEntry audit = AuditEntry.CreateAuditEntry(
id: guid,
entitySet: entry.EntitySet.Name,
typeName: entry.Entity.GetType().Name,
entityId: (entry.CurrentValues["Id"] as string) ?? ((entry.State == EntityState.Added) ? "New" : null),
oldValue: (entry.State != EntityState.Added) ? entry.OriginalValues[field.FieldType.Name].ToString() : "New",
newValue: (entry.State != EntityState.Deleted) ? entry.CurrentValues[field.FieldType.Name].ToString() : "Deleted",
modifier: Environment.UserDomainName + "\\" + Environment.UserName,
dbAction: Enum.GetName(typeof(EntityState), entry.State),
field: field.FieldType.Name,
dateStamp: DateTime.Now
);
this.AuditEntries.AddObject(audit);
}
}
}
調用SaveChanges事件當我創建一個新的實體,並試圖保存它的變化我得到這個錯誤:
Cannot insert the value NULL into column 'Id', table 'TimeEF.dbo.AuditEntries'; column does not allow nulls. INSERT fails. The statement has been terminated.
當你可以看到我已經設置了ID,任何想法?錯誤?
您是否*正面*有問題的記錄來自此代碼?跟蹤SQL。 – 2011-01-19 20:49:29
斷點?查看拋出異常的哪一行 - 檢查ID。 – RPM1984 2011-01-20 00:07:16