原文:Entity Framework问题:ReferentialConstraint 中的依赖属性映射由存储生成的列
今天在采用Entity Framework 的Database First反向以及用Code First写的数据库表时,在测试时一直出现以下错误:
情况是这样的:
我有两张表,记主表为A,辅表为B(即外键所在的表,设外键为Id,同时也是表B的主键)
这个问题是因为:
我的表B中的键Id不仅是外键,也具有自增属性,即在建表是用Identity标识之。而这两个功能是矛盾的。一方面,作为FK,Id的值为主表A决定;另一方面,Id又要求自增。
解决方法:
目标:去除自增功能。但是无法直接在字段上修改,因此可以考虑删除字段重建列,或者是重建表。并更正主键与外键。
由于在SQL-SERVER中,自增列属性不能直接修改,但可以通过以下方式变向实现
1、如果仅仅是指定值插入,可用以下语句,临时取消
SET
IDENTITY_INSERT TableName
ON
INSERT
INTO
tableName(xx,xx)
values
(xx,xx)
SET
IDENTITY_INSERT TableName
OFF
2、新增一列,删除自增列,修改改列名
alter
table
a
add
xxx
int
update
a
set
xxx=id
alter
table
a
drop
column
id
exec
sp_rename
'xxx'
,
'id'
,
'column'
3、通过修改系统关于该表的列属性,该方法使用不当将可能引起其它不可预料的错误
sp_configure
'allow update'
,1
reconfigure
with
override
go
update
syscolumns
set
colstat=0
where
colstat=1
and
id=object_id(
'tablename'
)
go
sp_configure
'allow update'
,0
reconfigure
with
override
4、重建表,注意在该字段不再采用Identity标识。