“正确的”MVC - 我应该使用构造函数吗?

时间:2013-11-06 16:33:55

标签: asp.net-mvc entity-framework

如果我有一个直接使用我的数据库的模型(个人使用ASP.NET w \ Entity Framework)我应该使用构造函数来设置变量吗?

示例:

public class songs
{
    public IEnumerable<songs> allSongs {get; }

    public songs()
    {
        using (var context = new entities())
        {
            allSongs = context.songs.orderBy(n => n.name).toList();
        }
    }
 }

VS

public class songs
{
    public IEnumerable<songs> allSongs
    {
        get
        {
            using (var context = new entities())
            {
                allSongs = context.songs.orderBy(n => n.name).toList();
            }
         }
    }

    public songs() {}
 }

技术上两者都是正确的,但哪个更正确?我唯一能想到只有一个正确答案的地方就是我设置的变量要么总是需要更新,要么在操作过程中保持不变。

2 个答案:

答案 0 :(得分:2)

您不应该从域类访问数据。

您应该创建一个与您的数据库交互的SongRepository。您将控制器注入此存储库,当您需要一个歌曲列表时,您只需引用该存储库。

songs实际上应该是它自己的实体时,它可能会变得有点棘手。但是我强烈建议您实现存储库模式。

使用存储库时,第二种方法最佳。

示例布局:

public class SongController : Controller {
 private SongRepository _songRepository;

 public SongController(SongRepository repo) {
  _songRepository = repo;
 }

 public ActionResult ShowSongs(){
  return View(_songRepository.GetAllSongs());
 }
}

public class SongRepository {
 public IEnumerable<Song> GetAllSongs(){
  using (var context = new entities())
        {
            allSongs = context.songs.orderBy(n => n.name).toList();
        } 
 }
}

答案 1 :(得分:0)

如果你只想要一首歌怎么办?我确定你不想加载所有歌曲。

如果我可以添加,您应该查看现有项目或tutorials以了解如何完成任务。请注意,我说可以,您将阅读的内容绝不是 方式。例如,@ JeroenVannevel建议使用存储库模式,但有很多人建议不要使用它(使用EF时)。

我建议您在决定数据访问策略之前,先浏览中的热门问题。