私は、MVC3、Razor、およびEntity Framework 4.1を使用して、リポジトリパターンでスキーマファーストアプローチ(コードファーストアプローチとは対照的に)を使用してテストアプリケーションを構築しています。ビュー内のデータオブジェクトにアクセスせず、代わりにモデルにアクセスしたいのですが、問題が発生しています。私の知る限り、データオブジェクトはデータレイヤーからObjectSetとして返されますが、ビューにはIEnumerableが必要であり、一方を他方にキャストする方法がわかりません。
明確にするために、ここにいくつかのコードがあります。
モデル ...
namespace TestSolution.Models
{
public class ProjectModel
{
[HiddenInput]
public int Id { get; set; }
[Required]
[StringLength(255, ErrorMessage = "The name cannot be more than 255 characters long.")]
[Display(Name = "Name")]
public string Name { get; set; }
[Required]
[Display(Name = "Description")]
public string Description { get; set; }
}
}
リポジトリ..。
public IQueryable<ProjectModel> GetProjects()
{
return Db.Project;
}
エンティティ..。
public ObjectSet<Project> Project
{
get
{
if ((_Project == null))
{
_Project = base.CreateObjectSet<Project>("Project");
}
return _Project;
}
}
コントローラー..。
public ActionResult Index()
{
IEnumerable<TestSolution.Models.ProjectModel> model = _projectRepository.GetProjects();
return View(model);
}
意見 ...
@model IEnumerable<TestSolution.Models.ProjectModel>
ビルド時に発生するエラー...
Cannot implicitly convert type 'System.Data.Objects.ObjectSet<TestSolution.Project>' to 'System.Linq.IQueryable<TestSolution.Models.ProjectModel>'. An explicit conversion exists (are you missing a cast?)
この質問は理にかなっていますか?ここからどこへ行くのかよくわかりません...皆さんが私に教えてくれるアドバイスは素晴らしいでしょう。:)
編集:リポジトリコードを...に変更することで、カイルの提案でこれを解決することができました...
public IQueryable<ProjectModel> GetProjects()
{
return Db.Project.Select(i => new ProjectModel() { Id = i.Id, Name = i.Name, Description = i.Description });
}