カスタム AccountPart で UserType を拡張しようとしています。ユーザー アカウント ID をコンテンツ パーツ ID にしたくありません。AccountId フィールドを、独立した自動インクリメントの 5 桁の数字 (10300、10301 など) または少なくとも自動生成された Guid にする必要があります。
私はそれを達成するために何度も試みましたが、それでも達成できませんでした。これが私の試みです。結果は、最初のユーザーの場合は 00000000-0000-0000-0000-000000000000 で、2 番目のユーザーの場合は例外が発生しました。Guid は =( を生成しませんでした。
アカウント パーツ:
public Guid AccountId
{
get { return Record.AccountId; }
set { Record.AccountId = Guid.NewGuid(); }
}
public decimal RealMoney
{
get { return Record.RealMoney; }
set { Record.RealMoney = value; }
}
public decimal VirtualMoney
{
get { return Record.VirtualMoney; }
set { Record.VirtualMoney = value; }
}
public decimal BonusPoints
{
get { return Record.BonusPoints; }
set { Record.BonusPoints = value; }
}
移行者:
SchemaBuilder.CreateTable("AccountPartRecord",
table => table
.ContentPartRecord()
.Column<Guid>("AccountId",
x => x
.WithType(DbType.Guid)
.Unique()
.NotNull()))
ContentDefinitionManager.AlterPartDefinition("AccountPart",
builder => builder.Attachable());
ContentDefinitionManager.AlterTypeDefinition("User",
cfg => cfg.WithPart("AccountPart"));
また、この方法で AccountId を追加しようとしました:
SchemaBuilder.ExecuteSql(@"
ALTER TABLE [BetIt].[dbo].[Betit_AccountPartRecord]
ADD AccountId UNIQUEIDENTIFIER DEFAULT NEWID()");
同じように動作します - 各新規ユーザーに emty Guid を設定します。しかし、Sql Management Studio を開いて新しいレコードを手動で追加すると、ランダムな Guid が生成されます。私は完全に混乱しています...
更新: ハンドラーを使用して、コンテンツ パーツの自動 Guid 生成を実際に達成しました。しかし、それは私には回避策のように見えます。これが独自の価値を生み出す唯一の方法だとは思いません。
移行者:
SchemaBuilder.CreateTable("AccountPartRecord",
table => table
.ContentPartRecord()
.Column<long>("AccountId",
x => x
.WithType(DbType.Guid)
.NotNull()
.Unique())
部:
public class AccountPart : ContentPart<AccountPartRecord>
{
public Guid AccountId
{
get { return Record.AccountId; }
set { Record.AccountId = value; }
}
}
ハンドラ:
public class AccountPartHandler : ContentHandler
{
public AccountPartHandler(IRepository<AccountPartRecord> repository)
{
Filters.Add(new ActivatingFilter<AccountPart>("User"));
Filters.Add(StorageFilter.For(repository));
OnCreating<AccountPart>((context, accountPart) =>
accountPart.AccountId = Guid.NewGuid());
}
}