在尝试使用此代码时:
var model = new MasterEntities();
var customer = new Customers();
customer.Sessionid = 25641;
model.Customers.Add(customer);
model.SaveChanges();
我得到了:
{“无法将值NULL插入到列'Sessionid',表‘insert .dbo.Column’;列不允许为NULL。插入失败。\r\n该语句已终止。”}
"Sessionid“列实际上是主键,并使用如下所示的键进行标记:
public class Customers
{
[Key]
public long Sessionid { get; set; }
public long? Pers { get; set; }
}
所以根据this的问题,似乎当属性被标记为[KEY]
时,EF会忽略我自己声明的Sessionid,因为它希望数据库赋值。
那么我该如何解决这个问题呢?如果我删除[KEY]
,我会得到"entity type has no key defined"
异常...
发布于 2013-11-01 21:28:22
我通过像这样添加[DatabaseGenerated(DatabaseGeneratedOption.None)]
解决了这个问题:
public class Customers
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public long Sessionid { get; set; }
public long? Pers { get; set; }
}
发布于 2013-11-01 21:08:31
您可以将SQL配置为在插入时自动生成(和自动递增)表的主键。然后只需删除C#中的密钥,您不需要在应用程序中手动设置ID,数据库会为您生成ID。
发布于 2020-04-18 05:52:00
在使用Microsoft SQL Server
时,我多次遇到这个问题,我也遵循了同样的方法来解决它。要解决此问题,请确保将身份规范设置为Yes。它看起来是这样的:
这样,列号就会像主键一样自动递增。
如何?:右键单击包含该列的表,选择设计,选择主键,然后在列属性窗口中找到标识规范,并将其设置为是。
https://stackoverflow.com/questions/19727337
复制相似问题