1

我有一个具有 datetime 属性的实体,ImageModifiedDate它存储图像的最后修改日期。如果我更改图像,这个属性可以以某种方式自动更新吗?我的意思是这个属性可以绑定到文件(图像)并且可以在实际文件更改时(自动)更改吗?

我在 asp.net mvc 3 应用程序中需要这个,但我认为它也可以标记为 c# 问题。

已编辑:我将图像存储在文件流中,而不是数据库中

4

2 回答 2

1

看起来你有两个方面的问题:更新数据库中的最后修改日期,并知道数据库已经更改,然后显示更改。

首先,创建一个 Windows 服务或类似程序,并让它使用 FileSystemWatcher 来监视文件更改。然后它可以用新信息更新数据库。

至于在 Web 应用程序中显示更改,您可以让应用程序通过 AJAX 轮询并更新显示日期的 HTML。这样,您就不必在日期更改时更新整个页面。

于 2013-02-19T14:25:09.130 回答
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);
}    
于 2013-02-19T14:25:38.647 回答