如何为两个数据库类制作单个控制器 - MVC3

时间:2012-08-29 03:13:30

标签: asp.net-mvc-3

我有两个数据库类,如下所示:

 public class TopDate
    {
        [Key]
        public int DateId { get; set; }
        public DateTime Date { get; set; }
    }
 public class TopSong
    {
        [Key]
        public int SongId { get; set; }        
        public string Title { get; set; }
        public int DateId { get; set; }
    }

其中DateId是TopSong的外键

我正在创建一个控制器,通过它我可以创建,删除或编辑这些数据库值。

当我右键单击控制器类并添加控制器时,我只能选择上面定义的两个类中的一个。有没有办法让1个控制器在一个页面上处理这两个表的数据库更新?

错误图片:enter image description here

2 个答案:

答案 0 :(得分:1)

您的控制器不应直接处理域对象(意味着与您的数据库直接关联的那些事物)。创建一个包含所需属性的ViewModel,使用您的服务层填充ViewModel,您的控制器将使用它作为其基础的模型。根据上面的描述,您的ViewModel的示例可能如下所示:

public class MusicViewModel
{
    public int SongId {get;set;}
    public string Title {get;set;}
    public IEnumerable<DateTime> TopDates {get;set;}
}

此视图模型将包含特定歌曲为热门歌曲的所有日期列表。

答案 1 :(得分:0)

您显示的对象(代码)是数据库类(所谓的域对象)。 你需要做的是定义一个视图模型,一个标准的ASP MVC实践: 您定义了一个类,该类是为特定视图定制的,仅包含与该特定视图相关的数据。因此,您将拥有一个用于创建歌曲的视图的视图模型,另一个用于更新它的视图模型等。

实际上你描述的情况是使用视图模型的经典情况。但是,在视图中使用域对象实际上是非常糟糕的做法,并且容易出现比您想要处理的更多问题。

希望这有帮助。

相关问题