3

是的,这些问题中的另一个。我看过这里但无济于事..
这是我的情况。
我创建了一个 ASP 站点,最初使用的是 SQLce。事实证明这很糟糕,因为主持人不支持它。我通过 Web Matrix 方法将 sdf 文件转换为 SQL server 2012 db。数据库一切正常,一切都可以读取数据。当我尝试将任何内容写入表格时,问题就出现了。VS 出现说:
当 IDENTITY_INSERT 设置为 OFF 时,无法在表“组”中插入标识列的显式值。
现在..以前一切都很顺利。这是我建立的一个故事的例子:

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,还有什么方法?

4

2 回答 2

4

转到您的数据模型并验证身份列的“StoreGeneratedPattern”属性是否有效设置为“身份”。

于 2012-11-22T09:16:02.820 回答
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

于 2012-11-22T09:16:37.413 回答