EF:当IDENTITY_INSERT设置为OFF时,无法在表'Groups'中为identity列插入显式值

时间:2012-11-22 09:09:10

标签: asp.net sql entity-framework c#-4.0 identity-insert

是的,这是另一个问题。我看过这里却无济于事。
这是我的情况 我开始使用ASP网站,最初使用的是SQLce。事实证明这是不好的,因为主持人不支持它。我通过Web Matrix方法将sdf文件转换为SQL server 2012 db。数据库都很好,一切都可以读取数据。当我尝试向桌子写任何东西时,问题就出现了。 VS出现说:
当IDENTITY_INSERT设置为OFF时,无法在表'Groups'中为identity列插入显式值 现在......以前一切都很好。这是我设置的故事的一个例子:

Column1: ID - Int - Primary key. - Identity specification yes, with a increment of 1  
Column2: GroupName - nvarchar(100) - just a normal text field  

然后。它窒息的代码在哪里:

        using (SLEntities context = new SLEntities())  
        {  
            var namecheck = (from n in context.Groups  
                             where n.GroupName == newname  
                             select n).Count();  

            if (namecheck > 0)  
            {  
                // the name already exists.. return  
                lab_Error.Text = newname + " is already in the database. Please use another name";  
                return;  
            }  

            // namecheck is new.. add to db  
            Group g = new Group();  
            g.GroupName = newname;  
            context.Groups.Add(g);  
            context.SaveChanges();  
        }  

它在savechanges()上死亡 我的问题是如何解决这个问题? (我看过IDENTITY_INSERT ON事件,但是当你只创建表时不是吗?)..或者,不是使用和自动增加ID,而是另一种方式?

2 个答案:

答案 0 :(得分:4)

转到您的datamodel并验证标识列的“StoreGeneratedPattern”属性是否有效地设置为“Identity”。

答案 1 :(得分:0)

如果您在任何列上放置了IDENTITY_INSERT,则在数据库中创建表时,在从代码插入数据时,您不需要为该列提供值。

例如: -

CREATE TABLE dummy(id int identity(1,1), data varchar(100))

Insert into dummy values('First row')// it will work 

Insert into dummy values(1,'First row')// it will give error

更好的方法是从代码中提取数据时提到列名

喜欢

Insert into dummy(data) values('First row')

或者你可以这样做(: - 这将允许你在身份列中插入值)

SET IDENTITY_INSERT dummy ON
INSERT INTO dummy(id, data) VALUES(3, 'garden shovel')

您应首先查看此文章: - http://msdn.microsoft.com/en-us/library/aa259221(v=sql.80).aspx