3

我正在使用 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();


         }

     }
}   

我有一个主键,但我已经将它作为 AutoGeneratd 在 DBML Nullable 中设置为 true 为 false。我仍然无法摆脱它......请提出一些建议。

4

5 回答 5

9

终于经过很多麻烦后,我得到了一个新概念的答案。

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

您需要在循环( *for each,for or any other..)内部创建“表”类的对象(您要在 DB 中更新的对象),这样相同的记录不会被更新,并且每个对象都使用不同的内存位置(因为本地实例仅在循环内被破坏..)*

于 2012-12-03T14:35:46.130 回答
3

我有一个主键,但我已经在 DBML 中将其设置为 AutoGenerated 为 true

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

于 2012-12-03T14:05:21.360 回答
1

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

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

于 2012-12-03T13:57:56.070 回答
0

作为替代方案,您可以在 db 中调用存储过程,它将执行插入: 使用存储过程更新数据库。

于 2017-04-20T18:40:28.163 回答
0

使用 (VTMMedicalDBDataContext objVTMMedicalDBDataContext = new VTMMedicalDBDataContext()) { 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();


     }

 }

}

于 2018-04-17T17:10:07.117 回答