所以即时尝试向实体添加实例时遇到了这个奇怪的问题。它是一个使用EF 6.0的asp.net应用程序。无法将NULL插入到列中,但值不为空
例外:
SQLEXCEPTION:无法将NULL值插入列 '的OrderId', 表 'BETA.MDF.dbo.Orders';列 不允许有空值。 INSERT失败。该语句已终止。
我的代码:
User user = (User)Session["CurrentUser"];
BetaEntities entities = new BetaEntities();
Beta.Order order = new Beta.Order();
order.OrderId = Guid.NewGuid().ToString();
order.OrderDate = DateTime.Now;
order.OrderedBy = user.UserId;
order.HandledBy = entities.Users.Where(x => x.Rank > 0).Select(i => i.UserId).FirstOrDefault();
entities.Orders.Add(order);
entities.SaveChanges();
而且这是我的订单班,我已经尝试过[Databasegenerated]
public partial class Order
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public string OrderId { get; set; }
public System.DateTime OrderDate { get; set; }
public int OrderedBy { get; set; }
public int HandledBy { get; set; }
}
示例项:
编辑:
我尝试设置的OrderID的数据库数据类型,以UNIQUEIDENTIEFIER和更新的实体模型,数据库应产生的GUID(我删除本身,但我仍然得到同样的异常
这是我的新类:
public partial class Order
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public System.Guid OrderId { get; set; }
public System.DateTime OrderDate { get; set; }
public int OrderedBy { get; set; }
public int HandledBy { get; set; }
}
编辑:
,如果我做的OrderID NULLABALE并删除主键,我得到以下异常:
System.Data.Entity.Infrastructure.DbUpdateConcurrencyException:“商店更新,插入或删除语句影响意外数量的行(0)。自实体加载后,实体可能已被修改或删除。有关理解和处理乐观并发异常的信息,请参阅http://go.microsoft.com/fwlink/?LinkId=472540。'
但是这可以通过添加一个主键:(所以去除PK并使其NULLABLE心不是工作来解决。
此外,我需要分配给自己的GUID进一步的目的,从而让数据库分配GUID本身(与[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
)也不是一个选项。
看到[this](http://stackoverflow.com/questions/8855100/why-is-ef-trying-to-insert-null-in-id-column)不确定,但它可能会帮助你,祝你好运 –
您会得到非常明确的异常消息:_Cannot无法将值NULL插入到'OrderId'列中,因为列不允许为nulls_。只需设置列以允许“NULL”值。 – Fabio
身份字符串是无用 – brykneval