1

[ユーザー][グループ]の 2 つのテーブル間に多対多の関係があります (PK は IDENTITY 列である ID と呼ばれます)。この関係は、UserID と GroupID の 2 つの列を持つ[UserGroup]というテーブルとしてデータベース内で正規化されます。

これまで、EF モデル (データベース ファーストを使用) は[UserGroup]テーブルを抽象化し、明示的なテーブルとして表示されませんでした。

[User]テーブルと[Group]テーブルの両方に OrganizationID 列も含まれており、すべてのユーザーとグループ (およびそれらの関係) が特定の組織に存在することを指摘しておく必要があります)。

[UserGroup]に OrganizationIDフィールドを追加して、データベースのパフォーマンスを向上させる必要がありました ( [UserGroup]が OrganizationID によってクラスター化されるように)。その結果、データベースからの更新を実行した後、[UserGroup]は、ユーザーをグループに割り当てるために使用する既存の C# コードを壊した別個のエンティティとして表示されるようになりました。

以前は、グループを作成してユーザーに割り当てる必要がある場合、次のように使用していました。

user.Groups.Add(group);

グループ オブジェクトとユーザー オブジェクトが作成されたばかりで、データベース キーが割り当てられていない場合でも、EF はSaveChanges ( )。

[ UserGroup ]が EF モデルの明示的なテーブルとして存在するため、このコードは機能しません (理由: OrganizationID も明示的に追加する必要があります) が、 [UserGroup]オブジェクトを作成して関連付ける方法がわかりません。新しく作成された[User]および[Group]行にリンクします。

私が持っている最も近いものはこれです:

GroupUser gu = new GroupUser { GroupID = group.ID, OrganisationID = nOrganisationID, UserID = u.ID };
u.GroupUsers.Add( gu );

...しかし、user.ID と group.ID がまだ 0 であるため、機能しません。誰でもこれについてアドバイスできますか。ありがとう。

4

1 に答える 1

2

に 2 つのナビゲーション プロパティを追加する必要がありますUserGroup

public virtual Group Group { get; set; }
public virtual User User { get; set; }

新しいグループとユーザーでそれらを設定します。EF は、データを挿入する正しい順序を見つけ出し、プリミティブな外部キー値をジャストインタイムで設定します。

これを次のようにマッピングできます

HasRequired(p => p.Group).WithMany().HasForeignKey(p => p.GroupId);

UserGroupMappingクラス ( EntityTypeConfiguration<UserGroup>) で。

于 2013-02-04T22:44:17.060 に答える