Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在LINQtoSQL中,创建新条目时如何获取行的Id_C#_Sql_Linq_Asp.net Mvc 5 - Fatal编程技术网

C# 在LINQtoSQL中,创建新条目时如何获取行的Id

C# 在LINQtoSQL中,创建新条目时如何获取行的Id,c#,sql,linq,asp.net-mvc-5,C#,Sql,Linq,Asp.net Mvc 5,大家好,我有一个Id为递增的Sql表。我正在做的是通过外部链接或使用模型上传文件上传图像,并将图像文件保存在我的文件系统中,然后将文件名保存到我的数据库中。我的困境是,当保存文件时,我想在数据库中用其Id的后缀来命名它。但我每次都得到0的Id。另外,还有一种方法可以使保存到文件系统和保存到数据库这两个操作相互依赖,这样,如果一个操作失败,那么另一个操作也会失败。我不想让你厌烦,所以我把密码写得很短 CREATE TABLE [dbo].[Media] ( [Id] INT IDENTITY (1

大家好,我有一个Id为递增的Sql表。我正在做的是通过外部链接或使用模型上传文件上传图像,并将图像文件保存在我的文件系统中,然后将文件名保存到我的数据库中。我的困境是,当保存文件时,我想在数据库中用其Id的后缀来命名它。但我每次都得到0的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();

在保存行之前,不会获取ID。即使对于标识列,也无法预测您将获得什么ID,因为有人可能会在您查询之后但在您插入之前插入一行

因此,首先保存行,然后获取ID并保存文件。如果文件操作失败,(捕获所有异常),则删除该行