在自动增量字段上设置自定义标识值

时间:2011-04-12 17:57:42

标签: sql-server entity-framework linq-to-entities identity auto-increment

我的数据库(Sql server 2008)中有一个自动数字设置的id列。 我正在使用EF和linq2entities

在某些特定场景中,我希望能够设置自定义ID号码(显然我完全确定此值不会重复),例如我会用它来“填充”由删除引起的丢失的Id号码。我想在数据库中保留自动增量道具,问题是当我执行linq句子时,数据库会分配下一个Id编号,而不是我喜欢的编号。

也许这有点奇怪,但可以使用linq2entities吗?

提前致谢!

2 个答案:

答案 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分钟内触发它。