我問了一個類似的問題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; }
}
ETA:
我有變化public int BookNumber { get; set; }
到public int? BookNumber { get; set; }
這並不解決問題。
如果主鍵是自動編號字段,則唯一的其他唯一索引位於BookNumber上,因此您正在創建重複的BookNumber值。在這段代碼中並不清楚它發生的地方。可能存在與BookNumber在模型中不可空並且在數據庫可空的問題。 – bubi
我改變了'公衆int BookNumber {得到;組; }'到'公衆詮釋? BookNumber {get;組; }這不能解決問題。如果有幫助,我可以向您發送源代碼和訪問數據庫。 – TheColonel26
如果你給我一個可編輯的例子(也有數據),我可以檢查它 – bubi