Visual studio 2012 SQL Azure数据库/无法将记录插入表/提交更改期间未设置ID
在下面的例子中,我尝试将一个问题简化为根组件 我有一个非常简单的SQLAzure数据库,我在其中创建了一个名为Table1的测试表。Azure创建了一个ID字段,如果需要,则主键已选中。它将不允许选中“身份”框。还有几个其他字段是必需的 在我的VS2012项目中,我创建了一个LinqToSql类,该类创建了ProductionDataClasses1.dbml对象 我只想通过下面所示的方法向这个表中添加一条记录。据我所知,ID将在指定InsertOnSubmitNewRecord后的SubmitChanges期间设置 它第一次确实工作,但值设置为零。在随后的保存中,我得到一个异常,它是一个重复的记录,因为ID=0已经存在 为了将其放到上下文中,我在下面包含了一些示例代码。其思想是首先检查记录是否存在并更新。如果没有,我想添加一条记录 我的问题是。。。我需要手动设置ID吗?如果是这样,我如何将该值设置为int,以及如何检索下一个值。我尝试更改为Guid,但不允许 以下是我的代码示例: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
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,我的代码正常工作 谢谢你的回复。