使用EntityDataSource和可空列。如何将我的数据库中的列更新为null?

时间:2010-09-13 13:14:29

标签: .net .net-4.0 entity-framework-4

当绑定到任何控件(例如“FormView”)时,任何人都可以可靠地获取EntityDataSource以将可为空的列保存为数据库“null”吗?

我尝试过使用几种不同的UpdateParameters(SessionParameter,ControlParamater,Parameter等)。我已经尝试将“ConvertEmptyStringToNull”设置为true并完全关闭该属性。什么都行不通。在我的“插入”它工作正常(但显然插入一条记录,如果没有值,它必须插入“东西”。)

(我确保在实体设计器中将列设置为nullable = true)。

我尝试将该列绑定到标签并将标签的文本值设置为“”。

在所有这些情况下,我可以成功地将列设置为值,而不是为NULL。

1 个答案:

答案 0 :(得分:1)

我有类似的问题。

我刚发现的唯一解决方法是在ItemUpdated事件中重新加载对象。检查我想要设置为null的值是否为null,如果是这种情况,请将该值再次设置为null。像那样:

protected void FormView1_ItemUpdated(object sender, FormViewUpdatedEventArgs e)
    {
        // Use the Exception property to determine whether an exception
        // occurred during the insert operation.
        if (e.Exception != null)
        {
            // handle the exception
        }
        else
        {
            //force the suppression of the foreign key relation
            using (var context = new ProxiEntities())
            {
                //reload my object
                var id = Convert.ToInt32(e.Keys["SessionID"]);
                var session = (from o in context.Sessions
                               where o.SessionID == id
                               select o).FirstOrDefault();

                try
                {
                    //check if I wanted to set a value to null
                    if (e.NewValues["MagasinID"] == null)
                    {
                        //if yes, set it to null and save
                        session.MagasinID = null;
                    }
                    if (e.NewValues["LieuID"] == null)
                    {
                        session.LieuID = null;
                    }
                    context.SaveChanges();
                }
                catch (Exception)
                {
                    //Add code to log the error.
                }
            }
        }
    }

这是我找到解决方法的唯一方法。这似乎也是一个不寻常的问题。你是我唯一能找到的人。