0

データベースにユーザー、ユーザーグループなどの典型的なテーブルがあり、それらには関係があります。

私のドメインモデルでは、ユーザーをリクエストすると、ユーザーが取得され、各ユーザーが属しているプロパティを持っていることを望みます。つまり、これらは彼が属するグループです。プロパティで、グループのリストが必要です(グループとしてタイプセーフ)

一方、同じことを行う必要があります。つまり、各グループは、グループに属するユーザーを認識している必要があります。

私はこのクラスを持っています(例):

public class User
{
    int Id { get; set; }
    string Name { get; set; }
    List<Usergroup> BelongsTo { get; set; }

    User()
    {
        BelongsTo = new List<Usergroup>();
    }
}

public class Usergroup
{
    int Id { get; set; }
    string Name { get; set; }
    List<User> Users { get; set; }

    Usergroup()
    {
        Users = new List<User>();
    }
}

internal class Relation
{
    int userId;
    int groupId;
}

さて、それを実装する最良の方法と、すべてのオブジェクトを埋めるための最速の方法は何ですか。

ところで:私は亜音速を使用してすべてのデータベースレコードを取得しています(テーブルごとに1つ選択します)。少なくとも 1500 人のユーザーと 30 のグループがあります。

私の現在のコードは、グループのforeach、グループの関係.where、次にusers.singleordefaultに基づいてユーザーを見つけ、ユーザーをグループに追加し、グループをユーザーに追加します。ただし、これを行うには約30秒かかります。

私のclient-appはwebappなので、キャッシュされたリポジトリに結果を保存するので、このようにしています!!

4

2 に答える 2

2

私の現在のコードは、グループのforeach、グループの関係.where、次にusers.singleordefaultに基づいてユーザーを見つけ、ユーザーをグループに追加し、グループをユーザーに追加します。

あなたがここで言っていることがわかりません。

これを行うには約30秒かかります

1500 人のユーザーと 30 のグループしかないことを考えると、何をしていても遅すぎるように思えます。

さて、それを実装する最良の方法と、すべてのオブジェクトを埋めるための最速の方法は何ですか.

あなたが望むなら...

  • すべてのユーザー、各ユーザーのグループのいずれか
  • または、各グループのユーザーを含むすべてのグループ

...次に、結合されたレコードをデータベースから選択することをお勧めします。

しかし、なぜなら...

  • すべてのデータが必要です(双方向で結合)
  • 1500 レコードしかありません

...では、できる限り単純にすべてを選択し、アプリケーションに参加することをお勧めします。

//select users
Dictionary<int, User> users = new Dictionary<int, User>();
foreach (User user in selectUsersFromDatabase())
{
  users.Add(user.Id, user);
}
//select groups
Dictionary<int, Group> groups = new Dictionary<int, Group>();
foreach (Group group in selectGroupsFromDatabase())
{
  groups.Add(group.Id, group);
}
//select relations
//and join groups to users
//and join users to groups
foreach (Relation relation in selectRelationsFromDatabase())
{
  //find user in dictionary
  User user = users[relation.userId];
  //find group in dictionary
  Group group = groups[relation.groupId];
  //add group to user and add user to group
  user.BelongsTo.Add(group);
  group.Users.Add(user);
}
于 2009-01-23T11:57:05.770 に答える