gpt4 book ai didi

c# - ASP.NET Core 模型是否有类似 OnDelete 回调之类的东西?

转载 作者:行者123 更新时间:2023-12-02 15:45:22 25 4
gpt4 key购买 nike

我有以下模型:

 public class MyFiles
{
public int MyFilesId { get; set; }
public string Name { get; set; }
public string Path { get; set; }
}

正如你所理解的,它是上传文件的模型。每个模型都保留 wwwroot/... 的路径和文件(例如图像)名称。但是当我删除这个模型时,如何删除文件呢?我的意思是:

var res = _applicationDbContext.MyFiles.FirstOrDefault(x => x.MyFilesId = 666);
_applicationDbContext.MyFiles.Remove(res);
_applicationDbContext.SaveChanges();

当然,上面的代码不会删除文件。如果我可以写这样的东西,那就非常有用:

 public class MyFiles
{
public int MyFilesId { get; set; }
public string Name { get; set; }
public string Path { get; set; }

protected OnDelete() { // here is logic for removing the file from OS }
}

最佳答案

EF 中没有可以订阅的事件机制。不过,您可以做的是覆盖SaveChanges,如here所述。

所描述的是以下内容的变体:

public interface IFileSystemEntity
{
string Path { get; set; }
}

public class MyFiles: IFileSystemEntity
{
public int MyFilesId { get; set; }
public string Name { get; set; }
public string Path { get; set; }

protected OnDelete() { // here is logic for removing the file from OS }
}

然后在你的 DBContext 中

public override int SaveChanges()
{
this.ChangeTracker.DetectChanges();
var added = this.ChangeTracker.Entries()
.Where(t => t.State == EntityState.Deleted)
.Select(t => t.Entity)
.ToArray();

foreach (var entity in added)
{
if (entity is IFileSystemEntity)
{
var track = entity as IFileSystemEntity;
// Remove logic here
}
}
return base.SaveChanges();
}

关于c# - ASP.NET Core 模型是否有类似 OnDelete 回调之类的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59393097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com