我想控制分配给身份用户的主键或ID列的内容。基本上,我的系统的用户也是另一个系统的用户(要求),我想在我的系统上创建该用户的帐户时使用另一个系统的用户ID。与要求同时支持另一个系统的用户ID和与我的系统不同的用户ID相比,使它们相同将简化很多事情。
到目前为止,我已经将Id的类型从字符串更改为long,以进行匹配。但是,当我创建用户时,新用户创建失败,因为Id为null。也就是说,IdentityUser希望Id列是一个Identity,因此数据库在插入时会自动填充它。基本上,在调用Create(user,password)之前,它会忽略我将Id设置为的值。我尝试将Id属性覆盖为
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Computed)]
public override long Id
{
get { return base.Id; }
set { base.Id = value; }
}
但出现以下异常:
[NotSupportedException: Modifications to tables where a primary key column has property 'StoreGeneratedPattern' set to 'Computed' are not supported. Use 'Identity' pattern instead. Key column: 'Id'. Table: 'CodeFirstDatabaseSchema.ApplicationUser'.]
System.Data.Entity.Core.Mapping.Update.Internal.UpdateCompiler.BuildSetClauses(DbExpressionBinding target, PropagatorResult row, PropagatorResult originalRow, TableChangeProcessor processor, Boolean insertMode, Dictionary`2& outputIdentifiers, DbExpression& returning, Boolean& rowMustBeTouched) +2292
System.Data.Entity.Core.Mapping.Update.Internal.UpdateCompiler.BuildInsertCommand(PropagatorResult newRow, TableChangeProcessor processor) +204
System.Data.Entity.Core.Mapping.Update.Internal.TableChangeProcessor.CompileCommands(ChangeNode changeNode, UpdateCompiler compiler) +412
基本上说“ Id”必须是“ Identity”列。
因此,在这一点上,我不知所措。这有可能吗?
答案 0 :(得分:1)
在离开了片刻之后,我回来了,做了更多的研究并解决了这个问题。基本上,我必须用None而不是Computed或Identity来装饰DatabaseGeneratedAttribute。
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)]
public override long Id
{
get { return base.Id; }
set { base.Id = value; }
}