Как контролировать значения столбца IdentityUser.Id? - PullRequest
0 голосов
/ 09 января 2019

Я хочу контролировать, что назначено первичному ключу или столбцу Id пользователя Identity. По сути, пользователи моей системы также являются пользователями другой системы (требование), и я хочу использовать идентификатор пользователя из другой системы при создании учетной записи этого пользователя в моей системе. Если они будут одинаковыми, это упростит многие вещи, в отличие от необходимости поддерживать как идентификатор пользователя из другой системы, так и отличающийся от моего.

Пока что я изменил тип Id со строки на long, чтобы соответствовать. Однако, когда я создаю пользователя, создание нового пользователя завершается неудачно, потому что Id равен нулю. То есть IdentityUser ожидает, что столбец Id будет Identity, поэтому он автоматически заполняется базой данных при вставке. По сути, он игнорирует значение, которое я установил для Id перед вызовом Create (пользователь, пароль). Я попытался переопределить свойство 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.

Так что на данный момент я в растерянности, что попробовать дальше. Это вообще возможно?

1 Ответ

0 голосов
/ 09 января 2019

После того, как я ненадолго отошел от этого, я вернулся и сделал еще немного исследований и решил это. По сути, мне пришлось украшать атрибут DatabaseGeneratedAttribute значением None вместо Computed или Identity.

[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)]
public override long Id
{
    get { return base.Id; }
    set { base.Id = value; }
}
...