[英]using interfaces/abstract classes with Entity Framework CodeFirst
I have an Entity Framework CodeFirst Class (POCO) : 我有一个Entity Framework CodeFirst Class(POCO):
class Contract : IMyContract
{
...
}
interface IMyContract
{
public int DateSigned{get;}
}
why am I not able to intercept context change operations in this way when a Contract is being modified by a client : 当客户端修改合同时,为什么不能以这种方式截获上下文更改操作:
void context_SavingChanges(object sender, EventArgs e)
{
foreach (ObjectStateEntry entry in
((ObjectContext)sender).ObjectStateManager.GetObjectStateEntries(
EntityState.Added | EntityState.Modified | EntityState.Deleted))
{
IMyContract myContract = entry.Entity as IMyContract;
if(myContract != null)
{
...
}
}
}
You mentioned Code-first but in the same time you are handling event of ObjectContext
and casting sender to ObjectContext
您提到了代码优先,但同时您正在处理
ObjectContext
事件并将发件人转换为ObjectContext
Try this instead: 试试这个:
public class MyContext : DbContext
{
private static EntityState[] states = new EntityState[]
{
EntityState.Added,
EntityState.Modified,
EntityState.Deleted,
};
...
public override int SaveChanges()
{
// If Entires<IMyContract> doesn't work use Entries() and check type
// inside the loop
foreach(var entry in ChangeTracker.Entries<IMyContract>()
.Where(e => states.Contains(e.State))
{
...
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.