我有一个WPF应用程序,其树列表包含以下类别类。树列表允许您创建新类别并设置父类别,但是,当我尝试设置父类别并保存时,我收到此错误:
发生了引用完整性约束违规:关系一端的“Category.Id”的属性值与另一端的“Category.ParentCategoryId”的属性值不匹配。
我尝试创建单元测试并手动输入值,以确保它不是树列表的数据绑定问题。我把它缩小到了课程的设计方式,但我不明白为什么我会遇到这个问题 Here is a picture of the tree list if you want to see what I'm trying to accomplish
我的许多视图模型都是使用类似的保存方法从save viewmodelbase派生的,所以我很困惑为什么他们的外键会保存,但是父类别会导致错误。
public class Category : BaseDbClass
{
public string CategoryName { get; set; }
public Category ParentCategory { get; set; }
public List<Category> SubCategories { get; set; }
public int? ParentCategoryId { get; set; }
public override string ToString()
{
return CategoryName;
}
}
public class BaseDbClass : ICheckTheDirty
{
[NotMapped]
public bool IsDirty { get; set; }
public int Id { get; set; }
public BaseDbClass()
{
DateCreated = DateTime.Now;
DateUpdated = DateTime.Now;
UserWhoUpdated = Environment.UserName;
}
public void ItemChanged()
{
IsDirty = true;
}
public void ItemSaved()
{
IsDirty = false;
}
public string UserWhoUpdated { get; set; }
public DateTime? DateUpdated { get; set; }
public DateTime? DateCreated { get; set; }
}
这是我在viewmodel中保存类别的方法:
using (ProductContext db = new ProductContext())
{
foreach (var category in ItemsCollection)
{
if (category.IsDirty)
{
db.Entry(category).State = EntityState.Modified;
category.ItemSaved();
}
}
var s = await db.SaveChangesAsync();
MessageBox.Show(s.ToString());
}
以下是xaml代码,了解它在视图中的设置方式
<dxg:GridControl Grid.Column="0" EnableSmartColumnsGeneration="True" ItemsSource="{Binding ItemsCollection}"
SelectedItem="{Binding SelectedItem}">
<dxg:GridControl.View>
<dxg:TreeListView AllowPerPixelScrolling="True" ShowTotalSummary="True" KeyFieldName="Id"
ParentFieldName="ParentCategoryId" />
</dxg:GridControl.View>
<dxg:GridColumn FieldName="CategoryName" IsSmart="True" />
<dxg:GridColumn FieldName="ParentCategory" IsSmart="True">
<dxg:GridColumn.EditSettings>
<dxe:ComboBoxEditSettings ItemsSource="{Binding ItemsCollection}" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
</dxg:GridControl>
网格控制来自devexpress。它使用parentcategoryid