ObjectDataSource没有要插入的值

时间:2011-06-10 21:04:29

标签: asp.net entity-framework entity-framework-4.1 objectdatasource

我正在使用ObjectDataSource来执行CRUD操作。出于某种原因,我得到一个“ObjectDataSource'ObjectDataSource1'没有要插入的值。检查'values'字典是否包含值。”

有什么建议吗?

我知道这个控件继承自ObjectDataSource控件。根据文档http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.insertmethod.aspx

如果设置了DataObjectTypeName属性,则以不同的方式解析该方法。 ObjectDataSource查找具有在InsertMethod属性中指定的名称的方法,该属性采用DataObjectTypeName属性中指定的类型的一个参数。

这就是我的ObjectDataSource控件的设置方式。

<asp: ObjectDataSource ID="ObjectDataSource1" runat="server" 
                DataObjectTypeName="MyApplication.Entities.Domain.MyObject" ConflictDetection="CompareAllValues"
                OldValuesParameterFormatString="original{0}" SelectMethod="GetUserDisplays"
                InsertMethod="CreateMyObject" UpdateMethod="UpdateMyObject" DeleteMethod="DeleteDisplay">
            </asp:ObjectDataSource>

我在InsertMethod上设置了一个断点,但是当我尝试保存表单时,应用程序甚至没有点击它。我怀疑DataObjectType由于某种原因没有被正确实例化。

我正在尝试在ASPxGridview控件的EditForm中执行Insert操作,而DataObjectType是一个EF POCO,其中包含一些附加属性(标记为虚拟)以从ObjectContext加载相关实体。我认为这可能是问题,但不知道如何解决它(到处寻找!!!)。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:5)

虽然我无法确定为什么DataObjectType没有自动实例化,但我意识到在调用ObjectDataSource上的InsertMethod之前需要添加一个输入参数。为此,我需要在Inserting事件中添加输入参数(在我的场景中)。感谢StackOverflow上的另一篇文章,我能够弄清楚我需要从ObjectDataSource中删除'DataObjectTypeName'属性才能触发Inserting事件。

答案 1 :(得分:1)

我没有注意到ObjectDataSource定义中的“TypeName”属性。 DataObjectTypeName according to MSDN用于标识“ObjectDataSource控件在更新,插入或删除数据操作中用于参数的类”,而不是从数据绑定控件传递单个值。如果类是相同的(即CRUD方法类和数据对象定义类),则应将这两个属性分配给同一个类。但是,如果您的方法包含在与DTO不同的类中,那么您将单独识别每个类。

答案 2 :(得分:0)