C# 单个视图中的多个存储库

C# 单个视图中的多个存储库,c#,viewmodel,C#,Viewmodel,我读了一些关于创建包含多个存储库的视图的问题,但我似乎无法找到正确的组合来让它工作 I 3个存储库,它们连接到SQL数据库中的三个不同表。我有控制器和视图模型,可以正确显示信息。我似乎无法让部分观点发挥作用。当我创建一个视图并尝试在视图中使用partialview时,我收到一个错误,即模型不包含存储库。我想知道我是否只需要一个包含3个存储库类的文件 我有: DomainPlayerRepository.CS using System; using System.Collections.Gener

我读了一些关于创建包含多个存储库的视图的问题,但我似乎无法找到正确的组合来让它工作

I 3个存储库,它们连接到SQL数据库中的三个不同表。我有控制器和视图模型,可以正确显示信息。我似乎无法让部分观点发挥作用。当我创建一个视图并尝试在视图中使用partialview时,我收到一个错误,即模型不包含存储库。我想知道我是否只需要一个包含3个存储库类的文件

我有: DomainPlayerRepository.CS

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Domain.Games;

namespace Domain.Abstract
{
    public interface DomainPlayerRepository
    {
        IQueryable<Player> Player { get; }
    }

}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用域名。游戏;
命名空间域.Abstract
{
公共接口域PlayerRepository
{
IQueryable播放器{get;}
}
}
DomainGameRepository.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Domain.Games;

namespace Domain.Abstract
{
    public interface DomainGameRepository
    {
        IQueryable<Game> Game { get; }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用域名。游戏;
命名空间域.Abstract
{
公共接口域游戏库
{
IQueryable游戏{get;}
}
}
GamePartialView.cshtml

@model Domain.Games.Game

<div class="Game">
    @Model.Date   @Model.NumPlayers @Model.PotMoney

</div>
@model Domain.Games.Game
@Model.Date@Model.NumPlayers@Model.PotMoney
List.cshtml(适用于播放器)

@model IEnumerable
@{
ViewBag.Title=“玩家”;
}
玩家
@foreach(模型中的var p)
{
@p、 FName@p.LName disability@p.disability.ToString()
}
@foreach(模型中的var p)
{
@Html.Partial(“GamePartialView”,p)
}
我也一直在尝试获取一个包含我的两个存储库的viewmodel,但这还不起作用

MultiRepositoryViewModel.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Domain.Games;

namespace WebUI.Models
{
    public class MultiRepositoryViewModel
    {
        public IEnumerable<Player> Player { get; set; }
        public IEnumerable<Game> Game { get; set; }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用域名。游戏;
名称空间WebUI.Models
{
公共类MultiRepositoryViewModel
{
公共IEnumerable播放器{get;set;}
公共IEnumerable对策{get;set;}
}
}

将视图的模型更改为ViewModel,并使用您定义的属性

@model WebUI.Models.MultiRepositoryViewModel

@{
    ViewBag.Title = "Players";
}

<h2>Player</h2>

@foreach (var p in Model.Player) 
{
    <div class ="player">
       <h3>@p.FName  @p.LName Handicap @p.Handicap.ToString()</h3>
    </div>
}

@foreach (var p in Model.Game)
{
    <div class ="game">
       @Html.Partial("GamePartialView", p)
    </div>
}
@model WebUI.Models.MultiRepositoryViewModel
@{
ViewBag.Title=“玩家”;
}
玩家
@foreach(Model.Player中的var p)
{
@p、 FName@p.LName disability@p.disability.ToString()
}
@foreach(模型博弈中的var p)
{
@Html.Partial(“GamePartialView”,p)
}

您遇到了什么错误?“不工作”是什么意思?错误是模型“Domain.Games.Player不包含游戏”(缩写版本)。这是正确的,我在我的PartialView中有一个不同的模型,即“域.游戏.游戏”。我想这可能与我没有在控制器中使用抽象有关。不确定这到底是什么,但我正在尝试“ActionResult”而不是“ViewResult”,以了解这是否有帮助。谢谢您的帮助。我甚至没有想过要改变模型声明。我现在得到一个不同的错误,传入字典的模型项的类型为“System.Data.Entity.DbSet`1[Domain.Games.Player]”,但此字典需要类型为“WebUI.Models.MultiRepositoryViewModel”的模型项。我将尝试找出编译器为什么会感到困惑。当您在控制器中调用
View(model)
方法时,您必须传递
MultiRepositoryViewModel
的一个新实例,而不是传递
DbSet
:)我不知道该怎么做。如果创建MultiRepositoryView的新实例,则其中的值为NULL。例如“var MultiRepositoryView=new mutlrepositoryview;return视图(MultiRepositoryView);在我的播放器控制器列表中()方法。顺便说一句,感谢您的帮助。您必须使用repositories中的值分配玩家和游戏属性再次感谢您的帮助。我终于让它显示了两个不同的存储库。我不得不后退一步,让我的MultiRepositoryView工作,然后修改它以使GamePartialView工作。
@model WebUI.Models.MultiRepositoryViewModel

@{
    ViewBag.Title = "Players";
}

<h2>Player</h2>

@foreach (var p in Model.Player) 
{
    <div class ="player">
       <h3>@p.FName  @p.LName Handicap @p.Handicap.ToString()</h3>
    </div>
}

@foreach (var p in Model.Game)
{
    <div class ="game">
       @Html.Partial("GamePartialView", p)
    </div>
}