0

私のタイトルが具体的ではないことはわかっています。私の質問はすでにどこかで尋ねられていると思いますが、検索方法がわかりません。

私はエンティティフレームワークでasp.net MVCを使用しており、次のモデルを持っています:

public class Receipt 
{        
    public int ReceiptId { get; set; }

    public bool Deleted { get; set; }

    public int UseraccountId { get; set; }

    public int MessageId { get; set; }

    public virtual Useraccount Useraccount { get; set; }

    public virtual Message Message { get; set; }

}//end Receipt

ユーザーは複数の領収書を持っています。特定のユーザーからのすべてのメッセージを取得したいと考えています。

これは私がこれまでにやっている方法です:

//Get receipts of the logged in user
List<Receipt> receipts = UnitOfWork.ReceiptRepository.Get(
    u => u.UseraccountId == loggedInUser.UseraccountId).ToList<Receipt>();

//Get all messages of the receipts
List<Message> messages = new List<Message>();
foreach (Receipt receipt in receipts)
{
    messages.Add(receipt.Message);
}

もっと良い方法はありますか?

前もって感謝します。

4

1 に答える 1

1

メッセージから領収書へのリンクはありますか? Receipt クラスから、 Message クラスと 1 対 1 の関係があると想定しています。このメソッドを実行できるようにするには、Message クラスを次のようにする必要があります。

public class Message
{
    public int MessageId {get; set;}
    //other properties here

    //these provide the backward link to the Receipt that "owns" the message
    public int ReceiptId {get; set;} 
    public virtual Receipt Receipt {get; set;} 
 }

モデルは、このようなものを使用してこのリンクを認識する必要があります (Code First を使用している場合)。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Receipt>()
        .HasOptional(r => r.Message)
        .WithRequired(m => m.Receipt);
}

データベース コンテキストにアクセスできるレイヤーになるため、クエリはリポジトリ レベル、特にメッセージリポジトリで実行する必要があります。クエリは次のようになります。

public IEnumerable<Message> GetAllMessagesByUserId (int userId)
{
    return context.Set<Message>().Include(x => x.Receipt)
                          .Include (x => x.Receipt.Useraccount)
                          .Where (x => x.Receipt.Useraccount.UseraccountId == userId)
                          .ToList();
}

UnitOfWork.MessageRepository.GetAllMessagesByUserId (loggedInUser.UseraccountId) を呼び出すと、関心のあるユーザーにリンクされているすべてのメッセージが返されます。

于 2013-02-19T13:38:43.313 に答える