我有两个数据库类,如下所示:
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个控制器在一个页面上处理这两个表的数据库更新?
错误图片:
答案 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实践: 您定义了一个类,该类是为特定视图定制的,仅包含与该特定视图相关的数据。因此,您将拥有一个用于创建歌曲的视图的视图模型,另一个用于更新它的视图模型等。
实际上你描述的情况是使用视图模型的经典情况。但是,在视图中使用域对象实际上是非常糟糕的做法,并且容易出现比您想要处理的更多问题。
希望这有帮助。