Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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
Visual studio 2012 SQL Azure数据库/无法将记录插入表/提交更改期间未设置ID_Visual Studio 2012_Linq To Entities_Azure Sql Database - Fatal编程技术网

Visual studio 2012 SQL Azure数据库/无法将记录插入表/提交更改期间未设置ID

Visual studio 2012 SQL Azure数据库/无法将记录插入表/提交更改期间未设置ID,visual-studio-2012,linq-to-entities,azure-sql-database,Visual Studio 2012,Linq To Entities,Azure Sql Database,在下面的例子中,我尝试将一个问题简化为根组件 我有一个非常简单的SQLAzure数据库,我在其中创建了一个名为Table1的测试表。Azure创建了一个ID字段,如果需要,则主键已选中。它将不允许选中“身份”框。还有几个其他字段是必需的 在我的VS2012项目中,我创建了一个LinqToSql类,该类创建了ProductionDataClasses1.dbml对象 我只想通过下面所示的方法向这个表中添加一条记录。据我所知,ID将在指定InsertOnSubmitNewRecord后的Submit

在下面的例子中,我尝试将一个问题简化为根组件

我有一个非常简单的SQLAzure数据库,我在其中创建了一个名为Table1的测试表。Azure创建了一个ID字段,如果需要,则主键已选中。它将不允许选中“身份”框。还有几个其他字段是必需的

在我的VS2012项目中,我创建了一个LinqToSql类,该类创建了ProductionDataClasses1.dbml对象

我只想通过下面所示的方法向这个表中添加一条记录。据我所知,ID将在指定InsertOnSubmitNewRecord后的SubmitChanges期间设置

它第一次确实工作,但值设置为零。在随后的保存中,我得到一个异常,它是一个重复的记录,因为ID=0已经存在

为了将其放到上下文中,我在下面包含了一些示例代码。其思想是首先检查记录是否存在并更新。如果没有,我想添加一条记录

我的问题是。。。我需要手动设置ID吗?如果是这样,我如何将该值设置为int,以及如何检索下一个值。我尝试更改为Guid,但不允许

以下是我的代码示例:

      public bool AddTestRecord(string someValue)
     {
         ProductionDataClasses1DataContext context = new ProductionDataClasses1DataContext();
         try
         {
             var ExistingRecord = context.Table1s.SingleOrDefault(c => c.TextKey == someValue);
             if (ExistingRecord == null)
             {
                 var NewRecord = new Table1();

              //   NewRecord.ID = ???? ; How Do I Manually Set.  It is getting set to 0 causing a duplicate value exception
                 NewRecord.TextKey = someValue;
                 NewRecord.AnotherValue = DateTime.Now.ToShortTimeString();
                 context.Table1s.InsertOnSubmit(NewRecord);

             }
             else
             {
                 ExistingRecord.AnotherValue = DateTime.Now.TimeOfDay.ToString();
             }
             context.SubmitChanges();
             return true;
         }
         catch (Exception e)
         {
             Console.WriteLine(e.Message);
             return false;
             context.SubmitChanges();
         }
     }

我建议手动运行SQL脚本来更改表并使列成为标识。看看这个答案


谢谢你的回复

我终于能够在一个新的表上完成这项工作,并将尝试按照您的指示对我的真实表进行修改。我上面写的代码还可以,所以问题出在SQLAzure表定义中

我发现问题在于,当您在SQLAzure中创建一个新表时,它会创建一个包含三个字段的表:ID、Column1、Column2。默认情况下,ID设置为主键,但不按原样检查标识

为了实现这一点,我将ID设置为Identity,将未选中的PrimaryKey和Column1设置为PrimaryKey。因此,当保存新记录时,会设置ID并检查Column1,以确保它不在系统中。第一次创建表时,我必须这样做。一旦保存,它将不允许我更改


之后,我将Linq更新为SQL类,并将新表放入。我注意到,现在设置了ID上的自动生成值和Column1上的PrimaryKey,我的代码正常工作

谢谢你的回复。