今天在采用Entity Framework 的Database First反向以及用Code First写的数据库表时,在测试时一直出现以下错误:
情况是这样的:
我有两张表,记主表为A,辅表为B(即外键所在的表,设外键为Id,同时也是表B的主键)
这个问题是因为:
我的表B中的键Id不仅是外键,也具有自增属性,即在建表是用Identity标识之。而这两个功能是矛盾的。一方面,作为FK,Id的值为主表A决定;另一方面,Id又要求自增。
解决方法:
目标:去除自增功能。但是无法直接在字段上修改,因此可以考虑删除字段重建列,或者是重建表。并更正主键与外键。
1、如果仅仅是指定值插入,可用以下语句,临时取消
SET
IDENTITY_INSERTTableName
ON
INSERT
INTO
tableName(xx,xx)
values
(xx,xx)
OFF
alter
table
a
add
xxx
int
update
set
xxx=id
drop
column
id
exec
sp_rename
'xxx'
,
'id'
'column'
sp_configure
'allowupdate'
sql plain" style="list-style:none; margin:0px!important; padding:0px!important; border:0px!important; outline:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.1em!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,1
reconfigure
with
override
go
syscolumns
colstat=0
where
colstat=1
and
id=object_id(
'tablename'
)
go
override
4、重建表,注意在该字段不再采用Identity标识。
原文链接:https://www.f2er.com/javaschema/285866.html