0

私は4つのテーブルを使用しています。

  1. ユーザー :: ID(PK)、名前、電子メール。
  2. UserMessage :: ID(PK)、件名、本文、送信日。
  3. UsersFromMessage :: ID(PK)、FromUSerID(FK (PK => (UserMessage)))、MessageTableID(FK (PK => (UserMessage))) およびいくつかの追加列。
  4. UsersToMessage :: ID(PK)、FromUSerID(FK (PK => (UserMessage)))、MessageTableID(FK (PK => (UserMessage))) およびいくつかの追加列。

上記でデータベース設計を共有しています。

例として、smtp を使用しないメール アプリケーションを考えてみましょう。

user テーブルに 3 人のユーザーがいるとします。U1、U2、U3。

U1 は U2 と U3 にメッセージを送信します。したがって、1 つのエントリが UserMessage テーブルに移動し、2 つのエントリが UsersToMessage テーブルに移動し、1 つのエントリが UsersFromMessage テーブルに移動します。

U1 から送信されたすべてのメッセージを表示したいので、次のクエリを使用します。

とりあえず userid は 1 とする。

ForumEntities objEntities = new ForumEntities();
 List<UsersFromMessage> lstUsers = objEntities.UsersFromMessages.Where(x => x.FromUserID == 1).Tolist();

User、UsersFromMessage のデータを取得しますが、UserToMessage は UsersFromMessage テーブルと直接関係がないため、UserToMessage に関する情報は取得しません。

U1 から送信されたメッセージを表示できますが、U1 によってメッセージが送信されたすべてのユーザーの名前を表示し、Listview にバインドしたいと考えています。

4

1 に答える 1

0

Your message class should look like the following:

public class Message
{
    ...
    public virtual User From { get; set; }
    public virtual IEnumerable<UsersToMessage> To { get; set; }
}

And then you can user the following to get your list of To users:

var msg = objEntities.Message.Where(m => m.From.ID == "U1").First();
var tousers = msg.To;
于 2012-08-25T18:46:18.157 に答える