由于某种原因,这段代码返回以下异常:
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实体数据模型功能生成,并且没有其他部分实现
答案 0 :(得分:1)
我修复了问题,问题是Id属性将StoreGeneratedPattern设置为Identity,这会导致它自动增加主键。由于主键是一个字符串,你不能真正自动增加:)。而这个设置的附加效果似乎是它忽略了任何一组; Id列上的命令,因为它计划自动增加它。
感谢您的所有支持