Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework OnDelete也可以删除文件_Entity Framework_Entity Framework 4.1 - Fatal编程技术网

Entity framework OnDelete也可以删除文件

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 =&

使用EF4.1,是否存在我可以在POCO上覆盖的函数事件,该事件在删除时将被调用?我将图像保存在文件系统上,数据库中包含对文件的引用。当我从数据库中删除时,我也想删除匹配的文件。

尝试在数据库级触发器中执行此操作。EF不是处理此问题的合适位置。

您可以覆盖
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空间,但常规磁盘空间是非常便宜的,所以我试图保持数据库大小降到最低。