Entity framework OnDelete也可以删除文件
使用EF4.1,是否存在我可以在POCO上覆盖的函数事件,该事件在删除时将被调用?我将图像保存在文件系统上,数据库中包含对文件的引用。当我从数据库中删除时,我也想删除匹配的文件。尝试在数据库级触发器中执行此操作。EF不是处理此问题的合适位置。您可以覆盖Entity framework OnDelete也可以删除文件,entity-framework,entity-framework-4.1,Entity Framework,Entity Framework 4.1,使用EF4.1,是否存在我可以在POCO上覆盖的函数事件,该事件在删除时将被调用?我将图像保存在文件系统上,数据库中包含对文件的引用。当我从数据库中删除时,我也想删除匹配的文件。尝试在数据库级触发器中执行此操作。EF不是处理此问题的合适位置。您可以覆盖DbContext的SaveChanges方法 public override int SaveChanges() { var deletedEntities = ChangeTracker.Entries().Where(entry =&
DbContext
的SaveChanges
方法
public override int SaveChanges()
{
var deletedEntities = ChangeTracker.Entries().Where(entry => entry.State == EntityState.Deleted);
foreach (var deletedEntity in deletedEntities)
{
if (deletedEntity .Entity is MyEntity)
{
//delete the file
}
}
return base.SaveChanges();
}
您可以在单个事务中包装文件删除和数据库更新,如下所示
using (var scope = new TransactionScope())
{
//your deletion logic
myContext.SaveChanges();
scope.Complete();
}
EF是唯一一个访问我的数据库的地方。我不喜欢将逻辑、文件系统调用放在数据库中。EF是否能够做到这一点?我不知道您使用的是哪个数据库系统,但从SQL Server 2008开始,您可能希望使用varbinary(max)FILESTREAM列,它将文件透明地存储在文件系统中,而不是数据库中。您不必使用它来手动管理文件删除。@Julien是的,我使用的是SQL 2008 rc2,这也是我的首选解决方案。然而,我的主机供应商改变了财富的SQL空间,但常规磁盘空间是非常便宜的,所以我试图保持数据库大小降到最低。