gpt4 book ai didi

c# - EF 4.0 实体属性 setter 抛出 ArgumentOutRangeException

转载 作者:行者123 更新时间:2023-11-30 18:05:32 26 4
gpt4 key购买 nike

我正在使用 EF 4.0 具有 String 类型属性 LanguageCode 的实体,它是两个字母的语言代码,例如 DEEN。还有一个引用约束和一个 Language 导航属性,但不包括 Language 实体集。

我想简单地设置语言代码而不加载 Language 实体。但是,setter 抛出一个 ArgumentOutOfRangeException。更准确地说,setter 中的 ReportPropertyChanges 方法执行以下操作:

OnLanguageCodeChanging(value);
ReportPropertyChanging("LanguageCode");
_LanguageCode = StructuralObject.SetValidValue(value, false);
ReportPropertyChanged("LanguageCode"); // ArgumentOutOfRangeException
OnLanguageCodeChanged();

ParamName 不是value,而是rowIndex。这很奇怪,不是吗?

Google'ing 这个问题让我 Apparent Breaking Change in Framework 4 (MSDN 社交)。这个问题看起来很相似,但没有解决方案。任何微弱的想法都会非常酷...... :)

该实体绑定(bind)在 Windows 窗体应用程序中。我试图在一个小演示应用程序中重现该行为,但不幸的是我失败了。也许问题不在于实体本身?

编辑:这是异常的堆栈跟踪(包括外部代码):

System.Windows.Forms.dll!System.Windows.Forms.DataGridView.GetCellDisplayRectangle(int columnIndex, int rowIndex, bool cutOverflow) + 0x3f2 bytes
System.Windows.Forms.dll!System.Windows.Forms.DataGridView.GetCellAdjustedDisplayRectangle(int columnIndex, int rowIndex, bool cutOverflow) + 0x3f bytes
System.Windows.Forms.dll!System.Windows.Forms.DataGridView.InvalidateCellPrivate(int columnIndex, int rowIndex) + 0x42 bytes
System.Windows.Forms.dll!System.Windows.Forms.DataGridView.OnCellCommonChange(int columnIndex, int rowIndex) + 0x59 bytes
System.Windows.Forms.dll!System.Windows.Forms.DataGridView.DataGridViewDataConnection.ProcessListChanged(System.ComponentModel.ListChangedEventArgs e) + 0x7dc bytes
System.Windows.Forms.dll!System.Windows.Forms.DataGridView.DataGridViewDataConnection.currencyManager_ListChanged(object sender, System.ComponentModel.ListChangedEventArgs e = {System.ComponentModel.ListChangedEventArgs}) + 0x43 bytes
System.Windows.Forms.dll!System.Windows.Forms.CurrencyManager.List_ListChanged(object sender, System.ComponentModel.ListChangedEventArgs e) + 0x7ec bytes
> DataAccessLayer.dll!DataAccessLayer.Profiles.LanguageCode.set(string value = "DE") Line 13029 + 0x21 bytes C#

最佳答案

List<T>绑定(bind)到 BindingList .两者都是DataGrid并绑定(bind)了一些用于详细 View 的文本框。当我添加新项目时,DataGrid未收到通知(因为 List<T> 未实现 IBindingList )。

该记录尚未添加到网格中,因此 Windows 窗体的绑定(bind)魔术尝试更新不存在的单元格。

我是这样解决的:

myBindingSource.DataSource = new BindingList<T>(myList); // List<T> myList

(由于评论中的提示,我发现了问题。)

关于c# - EF 4.0 实体属性 setter 抛出 ArgumentOutRangeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5551201/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com