2013-02-19 21 views
1

我有一個實體datetime屬性ImageModifiedDate它存儲圖像的最後修改日期。如果我更改圖像可以自動更新此屬性?我的意思是可以將此屬性綁定到文件(圖像),並且可以在實際文件更改時自動更改該屬性?如何自動更新包含文件上次修改日期的屬性?

我需要這個在asp.net mvc 3應用程序,但我認爲它也可以標記爲C#問題。

編輯:我存儲在文件流的圖像,而不是在數據庫

+0

哪裏像駐留?在與ASP.NET應用程序相同的服務器上?你需要如何保持最新?到第二個?當你說「實體」時,你是指實體框架? – 2013-02-19 14:21:55

+0

在同一臺服務器上;將是偉大的,它是一秒鐘;不,我使用Linq2Sql,我的意思是我的模型 – 2013-02-19 14:22:58

+0

看看[FileSystemWatcher](http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx)類,用於監視更改文件。 – 2013-02-19 14:31:42

回答

1

這似乎是你有兩件一個問題:更新數據庫中的最後修改日期,並且知道該數據庫有更改,然後顯示更改。

首先,創建一個Windows服務或此類程序並讓它使用FileSystemWatcher來監視文件更改。然後它可以用新信息更新數據庫。

至於在Web應用程序中顯示更改,您可以讓應用程序通過AJAX進行輪詢,並更新顯示日期的HTML。這樣,您不必在日期發生變化時更新整個頁面。

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); 
}  
+0

我將圖像存儲在實際的文件流中,而不是存儲在數據庫中。我有成千上萬的圖像,如果我每分鐘運行一次,我認爲它會真的減慢服務器速度。還有其他方法可以做到嗎?此外,我想要圖像立即更新(如果它可能可以完成)。 – 2013-02-19 14:30:03

+0

可能通過使用'FileSystemWatcher'? @AlekseiChepovoi查看更新。 – 2013-02-19 14:31:53

相關問題