由于某些未知原因,EF尝试将空值插入数据库

时间:2013-07-13 06:40:25

标签: c# .net

由于某种原因,这段代码返回以下异常:

An error occurred while updating the entries. See the inner exception for details. 
Inner Exception: Cannot insert the value NULL into column 'Id', 
table 'aspnet-Webate.dbo.Tasks'; column does not allow nulls. INSERT fails.\r\n
The statement has been terminated

变量任务是具有以下形式的字符串:

(task1, task2, task3, task4)

诊断程序显示这4个任务中的每个任务,在控制台中没有任何问题。没有数组索引为null或空白

            string[] taskArr = null;
            tasks = tasks.Substring(1, tasks.Length - 2); //remove the starting and ending parenthesis
            tasks = tasks.ToLower();
            tasks = tasks.Replace(" ", "");
            taskArr = tasks.Split(new char[] { ',' });
            foreach (string t in taskArr)
            {
                System.Diagnostics.Debug.WriteLine("t="+t);
                if (t != null && t != "")
                {
                    Task task = db.Tasks.Find(t);
                    if (task == null)
                    {
                        task = new Task { Id = t };
                        db.Tasks.Add(task);
                    }
                }
            }

            try
            {
                db.SaveChanges(); //save task changes before trying to save role
            }
            catch (Exception e)
            {
                throw exception code
            }

为什么EntityFramework可能会尝试将空值插入数据库,还有其他解释吗?

这是任务模型:

using System;
using System.Collections.Generic;

public partial class Task
{
    public Task()
    {
        this.Roles = new HashSet<Role>();
    }

    public string Id { get; set; }

    public virtual ICollection<Role> Roles { get; set; }
}

此类由Visual Studio 2012的ADO.NET实体数据模型功能生成,并且没有其他部分实现

1 个答案:

答案 0 :(得分:1)

我修复了问题,问题是Id属性将StoreGeneratedPattern设置为Identity,这会导致它自动增加主键。由于主键是一个字符串,你不能真正自动增加:)。而这个设置的附加效果似乎是它忽略了任何一组; Id列上的命令,因为它计划自动增加它。

感谢您的所有支持