2014-01-26 28 views
0

您好傢伙我有一個Id增加的Sql表。我正在做的是使用模型通過外部鏈接或文件上傳上傳圖像,並將圖像文件保存在我的文件系統中,然後將文件名保存到我的數據庫中。我的困境是,當保存文件我想在我的數據庫上用它的後綴Id來命名它。但是我每次都得到Id爲0。無論如何,要做到保存到文件系統和保存到數據庫的兩個操作是相互依賴的,這樣如果一個失敗了,那麼另一個失敗。我不想讓你感到厭煩,所以你我保持代碼簡短。Linq to Sql在創建新條目時如何獲得行的ID

CREATE TABLE [dbo].[Media] (
[Id] INT IDENTITY (1, 1) NOT NULL, 
[Title] NVARCHAR (50) NULL, 
[Link] NVARCHAR (500) NULL, 
PRIMARY KEY CLUSTERED ([Id] ASC) 
); 

視圖模型和數據庫模型看起來像

public class Post 
{ 
    //[Key] *Commented code is present in dbcontext model 
    //[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    //public int Id { get; set; } 
    // public string Link { get; set;} link to my filesystem 
    public string ExternalLink { get; set; }//gets saved on my filesystem 
    public HttpPostedFileBase File { get; set; }//gets saved on my filesystem 
    public string Title { get; set; } 
} 

我的控制器動作看起來像這樣

....Get the image in Sytem.Drawing.Image class called Img 
string path = System.Web.HttpContext.Current.Server.MapPath("~/App_Data/Imgs/"); 
Img.Save(path); //dont want to save as path but as Path + Title + _Id.jpg 
db.MediaSet.Add(mediat); 
db.SaveChanges(); 

回答

0

你沒有得到的ID,直到您保存一行之後。無法預測您將得到什麼ID,即使對於標識列也是如此,因爲在查詢之後但插入之前,某人可能會插入一行。

因此,先保存行,然後獲取ID並保存文件。如果文件操作失敗(捕獲所有異常),請刪除該行。