问题描述
|
我在数据库(sql server 2008)中有一个ID列,其中设置了自动数字。
我正在使用EF和linq2entities
在某些特定情况下,我希望能够设置自定义ID号(显然,我完全确定不会重复此值),例如,我将使用它来“填充”由于删除而导致的丢失ID号。我想将自动增量道具保留在数据库中,问题是当我执行linq语句时,数据库会分配下一个ID号,而不是我喜欢的ID号。
也许有点奇怪,但是可以使用linq2entities吗?
提前致谢!
解决方法
我相信除非有某种方法可以在实体框架中关闭\“ SET Identity_Insert TableName ON \”,否则它是不可能的。
基本上,在SQL Server中,当您在字段上发送标识时,除非您运行以下语句,否则无法手动填充它
SET Identity_Insert TableName ON
运行此语句后,您将能够手动填充“标识字段”。
我唯一想到的其他选择是从列中删除Identity属性,并使用部分类为Entity Framework中的字段创建自己的增量器
像这样
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
}
}
}
,我不想直言不讳地说这是不可能的,但这对于L2E来说是相当不错的事情。但这是一个非常简单的INSERT触发器。您将通过INSERTED(Google会解释)获得插入的行,然后使用所需的任何疯狂逻辑更新该行。
我认为您可以花费数小时来尝试解决L2E问题,也可以在二十分钟之内通过触发器完成操作。