Nic*_*els 1 entity-framework-4
让我们假设以下代码处理DataContext的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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我创建一个新实体并尝试保存它的更改时,我收到此错误:
无法将值NULL插入列'Id',表'TimeEF.dbo.AuditEntries'; 列不允许空值.INSERT失败.该语句已终止.
当你看到我设置了Id,有什么想法吗?错误?
您是否在EDMX文件中检查了对象的id列?如果其StoreGeneratedPattern属性标记为"computed"或"identity",则EF不会将C#值传递给其SQL语句.将StoreGeneratedPattern属性设置为"None",Entity Framework写入的SQL将包含您的C#创建的id值.
<EntityType Name="AuditEntry">
//...
<Property Name="id" Type="int" Nullable="false" StoreGeneratedPattern="None" />
//...
</EntityType>
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/dd296755(v=vs.90).aspx.
| 归档时间: |
|
| 查看次数: |
3771 次 |
| 最近记录: |