Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.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/8/linq/3.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# 获取错误“;无法添加已存在的实体。”;插入表格时';无需过程,将s值转换为DB_C#_Linq - Fatal编程技术网

C# 获取错误“;无法添加已存在的实体。”;插入表格时';无需过程,将s值转换为DB

C# 获取错误“;无法添加已存在的实体。”;插入表格时';无需过程,将s值转换为DB,c#,linq,C#,Linq,我使用Linq to sql将记录列表插入DB表,如下所示: //my DataContext Class using (VTMMedicalDBDataContext objVTMMedicalDBDataContext = new VTMMedicalDBDataContext()) { ReadOnlyCollection<TimeZoneInfo> objTimeZones = null; objTimeZones = TimeZoneInfo.Ge

我使用Linq to sql将记录列表插入DB表,如下所示:

//my DataContext Class
 using (VTMMedicalDBDataContext objVTMMedicalDBDataContext = new VTMMedicalDBDataContext())
 {
     ReadOnlyCollection<TimeZoneInfo> objTimeZones = null;

     objTimeZones = TimeZoneInfo.GetSystemTimeZones();

     if (objTimeZones.Count > 0)
     {
         //List<TimeZoneMaster> listTimeZones = new List<TimeZoneMaster>();
         TimeZoneMaster objTimeZoneMaster = new TimeZoneMaster();

         foreach (var timezone in objTimeZones.ToList())
         {

             objTimeZoneMaster.TimeZoneName = timezone.DisplayName;

             var localName = timezone.DisplayName;

             objTimeZoneMaster.TimeZoneOffsetInMinutes = Convert.ToInt32(timezone.BaseUtcOffset.TotalMinutes);                      


             objVTMMedicalDBDataContext.TimeZoneMasters.InsertOnSubmit(objTimeZoneMaster);
             objVTMMedicalDBDataContext.SubmitChanges();


         }

     }
}   
//我的DataContext类
使用(vtmedicaldbatacontext objvtmedicaldbatacontext=new vtmedicaldbatacontext())
{
ReadOnlyCollection objTimeZones=null;
objTimeZones=TimeZoneInfo.GetSystemTimeZones();
如果(objTimeZones.Count>0)
{
//List listTimeZones=新列表();
TimeZoneMaster objTimeZoneMaster=新的TimeZoneMaster();
foreach(objTimeZones.ToList()中的var时区)
{
objTimeZoneMaster.TimeZoneName=timezone.DisplayName;
var localName=timezone.DisplayName;
objTimeZoneMaster.TimeZoneOffsetInMinutes=转换为32(时区.BaseUtcOffset.TotalMinutes);
objvtmedicaldbdatacontext.TimeZoneMasters.InsertOnSubmit(objTimeZoneMaster);
objvtmedicaldbdatacontext.SubmitChanges();
}
}
}   

我有一个主键,但我已经将它在DBML中自动生成为true,可以为null,也可以为false。但我仍然无法消除它…请建议一些解决方法。

您必须更新表,使该列具有标识值(自动增量)

然后更新DBML模型->从DBML设计器中删除表,在服务器资源管理器中刷新表,然后再次拖放表对象。生成项目,它应该工作得很好

我有一个主键,但我已经在DBML中使其自动生成为true


这很好,但是,您是否在数据库级别自动生成了字段?DBML级别的自动生成实际上不会为您生成任何值,它只是向模型表明该值将由存储提供程序生成(因此它可能会忽略将其作为查询的一部分发送)。

经过许多麻烦之后,我终于用一个新概念得到了答案

对于所有面临类似问题的人,这里有一个明确的解决方案:

您需要创建“Table”类的对象(要在DB中更新哪个对象),
循环内部(*for each、for或任何其他..),以便不更新相同的记录,并且每个对象使用不同的内存位置(因为本地实例仅在循环内部被销毁..)*

作为替代方法,您可以调用db内部的存储过程,该存储过程将执行插入操作: 使用(vtmedicaldbdatacontext objvtmedicaldbdatacontext=new vtmedicaldbdatacontext()) { ReadOnlyCollection objTimeZones=null

 objTimeZones = TimeZoneInfo.GetSystemTimeZones();

 if (objTimeZones.Count > 0)
 {
     //List<TimeZoneMaster> listTimeZones = new List<TimeZoneMaster>();


     foreach (var timezone in objTimeZones.ToList())
     {
          TimeZoneMaster objTimeZoneMaster = new TimeZoneMaster();

         objTimeZoneMaster.TimeZoneName = timezone.DisplayName;

         var localName = timezone.DisplayName;

         objTimeZoneMaster.TimeZoneOffsetInMinutes = Convert.ToInt32(timezone.BaseUtcOffset.TotalMinutes);                      


         objVTMMedicalDBDataContext.TimeZoneMasters.InsertOnSubmit(objTimeZoneMaster);
         objVTMMedicalDBDataContext.SubmitChanges();


     }

 }
objTimeZones=TimeZoneInfo.GetSystemTimeZones();
如果(objTimeZones.Count>0)
{
//List listTimeZones=新列表();
foreach(objTimeZones.ToList()中的var时区)
{
TimeZoneMaster objTimeZoneMaster=新的TimeZoneMaster();
objTimeZoneMaster.TimeZoneName=timezone.DisplayName;
var localName=timezone.DisplayName;
objTimeZoneMaster.TimeZoneOffsetInMinutes=转换为32(时区.BaseUtcOffset.TotalMinutes);
objvtmedicaldbdatacontext.TimeZoneMasters.InsertOnSubmit(objTimeZoneMaster);
objvtmedicaldbdatacontext.SubmitChanges();
}
}

}

你的主键是什么类型的?@James:是整数类型。我想你的主键也是在DB级别自动递增的?嗯……你用的是哪个后端DB?我假设它是SQL server,但只是为了清楚起见。另外,您至少插入了一条记录。该记录的主键值是多少?是否正在生成?@James Yes James,我正在插入一条ID为1的记录,但我相信它不会在服务器端更新ID,因为只需在第二个InsertOnSubmit之前检查值,我发现ID仅在aspx.cs文件结尾处存在。。!!我无法获取答案中的最后一行…你想让我将O作为默认值传递给整数列吗???@Rahullanjan“你想让我将0作为默认值传递吗”-不,我不是这么说的。我删除了这一行,因为它使答案复杂化了。通过MGMT Studio添加新记录时,主键是否会增加?这纯粹是一个Linq2SQL问题吗?哈哈,当然,我太关注DBML了,以至于没有实际查看您的代码+1解决这个问题做得很好。一旦你插入了记录,它就会被附加到DataContext,所以你不能重复使用它。这救了我!!!好兄弟!!我有一个从列表添加到数据库的类似实现。得到的错误与您面临的完全相同,经过6个小时的调试,我终于完成了:)请解释为什么您的解决方案解决了最初提问者的问题。