我有一个日期时间属性ImageModifiedDate
的实体,它存储图像的最后修改日期。如果我更改图像可以以某种方式自动更新此属性?我的意思是这个属性可以绑定到文件(图像),并且可以在实际文件更改时自动更改吗?
我在asp.net mvc 3 app中需要这个,但我认为它也可以标记为c#问题。
已编辑:我将图片存储在文件流中,而不是存储在数据库中
答案 0 :(得分:1)
您似乎遇到了两个问题:更新数据库中的最后修改日期,并知道数据库已更改,然后显示更改。
首先,创建Windows服务或此类程序,并让它使用FileSystemWatcher来监视文件更改。然后,它可以使用新信息更新数据库。
关于在Web应用程序中显示更改,您可以通过AJAX进行应用程序轮询,只需更新显示日期的HTML。这样,您就不必在日期更改时更新整个页面。
答案 1 :(得分:1)
您需要在图像中进行某种服务并检查它们是否已更新。它需要做这样的事情:
foreach (var image in dbcontext.Images)
{
var filename = image.Filename;
var lastModified = System.IO.File.GetLastWriteTime(filename);
if (lastModified != image.LastModified)
{
image.LastModified = lastModified;
}
}
dbcontext.SaveChanges();
请记住,您需要做出权衡决定。您可以让它不断运行,但这会降低您的服务器速度。或者您可以每分钟或每五分钟运行一次,具体取决于您拥有的图像数量以及完成该过程所需的时间。
或者您可以使用FileSystemWatcher
,这些内容(请记住我没有测试过这段代码,但这足以让您入门):
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = "your path here";
watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
watcher.Filter = "*.jpg";
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnRenamed);
private static void OnChanged(object source, FileSystemEventArgs e)
{
// Specify what is done when a file is changed, created, or deleted.
Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
}
private static void OnRenamed(object source, RenamedEventArgs e)
{
// Specify what is done when a file is renamed.
Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
}