【发布时间】:2017-06-30 01:52:28
【问题描述】:
我问了一个类似的问题here,但这是导致相同错误消息的不同情况。
我正在更新一个非索引、非唯一属性 PageNumber。
我收到以下错误
OleDbException:您请求对表的更改不成功,因为它们会在索引、主键或关系中创建重复值。更改包含重复数据的一个或多个字段中的数据,删除索引,或重新定义索引以允许重复条目,然后重试。
public void DoRenumberPages(object blah)
{
var hiddenPages = projectDB.Pages.AsEnumerable().Where(x => !IsVisibleDrawing(x.DrawingType) && x.DrawingType != 3001).ToList();
for (int i = 0; i < hiddenPages.Count(); i++)
{
hiddenPages[i].PageNumber = i + 1000;
}
var TOCPages = projectDB.Pages.AsEnumerable().Where(x => x.DrawingType == 3001).OrderBy(x => x.BookNumber).ToList();
for (int i = 0; i < TOCPages.Count(); i++)
{
TOCPages[i].PageNumber = i + 1;
}
var visiblePagesNotTOC = projectDB.Pages.AsEnumerable().Where(x => IsVisibleDrawing(x.DrawingType) && x.DrawingType != 3001).OrderBy(x => x.BookNumber).ToList();
for (int i = 0; i < visiblePagesNotTOC.Count(); i++)
{
visiblePagesNotTOC[i].PageNumber = i + TOCPages.Count() + 1;
}
projectDB.SaveChanges();
RenumberPages.EnableExecute();
}
页面模型类
[Table("Content")]
public class Page
{
//** Primary Key
[Column("Counter")]
public int Id { get; set; }
public int ProjectCounter { get; set; }
public short Version { get; set; }
public short Revision { get; set; }
public bool Locked { get; set; }
public int DrawingType { get; set; }
//** Forign Key?
public int DeviceLocationCounter { get; set; }
//** Forign Key?
public int FolderID { get; set; }
[Column("Page")]
public int PageNumber { get; set; }
//** Indexed, Unique
public int BookNumber { get; set; }
public string PageIndex { get; set; }
//** Product
//** DrawingObject is not here
public bool Update { get; set; }
public short Flag { get; set; }
}
预计到达时间:
我已将 public int BookNumber { get; set; } 更改为 public int? BookNumber { get; set; } 这并不能解决问题。
【问题讨论】:
-
如果主键是自动编号字段,则唯一的其他唯一索引位于 BookNumber 上,因此您正在创建重复的 BookNumber 值。在这段代码中不清楚它发生在哪里。可能存在与 BookNumber 在模型中不可为空且在 DB 中不可为空相关的问题。
-
我已将
public int BookNumber { get; set; }更改为public int? BookNumber { get; set; }这并不能解决问题。如果有帮助,我可以将源代码和访问数据库发送给您。 -
如果你发给我一个可编译的例子(还有数据)我可以检查一下
-
@bubi:这是一个包含解决方案和数据库的 zip。只需运行测试项目。 1drv.ms/u/s!AsA1Mz52V5ZYg6RVOUldFiCekWrt_w
-
我认为您使用 VS 2017 开发了该项目...无论如何,我已经很难安装它但我需要一些时间...
标签: jet-ef-provider