我的数据库(Sql server 2008)中有一个自动数字设置的id列。 我正在使用EF和linq2entities
在某些特定场景中,我希望能够设置自定义ID号码(显然我完全确定此值不会重复),例如我会用它来“填充”由删除引起的丢失的Id号码。我想在数据库中保留自动增量道具,问题是当我执行linq句子时,数据库会分配下一个Id编号,而不是我喜欢的编号。
也许这有点奇怪,但可以使用linq2entities吗?
提前致谢!
答案 0 :(得分:2)
我相信除非有某种方法可以在实体框架内关闭“SET Identity_Insert TableName ON”,否则它是不可能的。
基本上在SQL Server中,当您在字段上发送Identity时,除非您运行以下语句,否则无法手动填充
SET Identity_Insert TableName ON
运行此语句后,您将能够手动填充标识字段。
我能想到的唯一其他选项是从列中删除Identity属性,并使用部分类
为实体框架中的字段创建自己的增量器像这样的东西
public partial class EntityClassName : global::System.Data.Objects.DataClasses.EntityObject, IEntity
{
partial void InitializeFields();
Int64 IEntity.IdentityColumn
{
get { return IdentityColumn; }
set { //some code for an incrementer
//and the ability to set manually
//if value provide is not null
}
}
}
答案 1 :(得分:0)
我不想说这是不可能的,但这对于L2E来说非常棒。但它是一个非常简单的INSERT触发器。您将通过INSERTED(谷歌将解释)获得插入的行,然后使用您想要的任何疯狂逻辑更新该行。
我认为你可以在数小时内试图解决L2E问题,或者在20分钟内触发它。