如何创建一个调用两个表的Action方法

时间:2010-12-25 19:12:47

标签: c# asp.net asp.net-mvc linq

提前感谢您的帮助。我无法使用两个或更多表格在asp.net mvc中创建或编辑字段。举个例子:我一直在使用MVC音乐商店的例子来学习

//
// GET: /StoreManager/Create

public ActionResult Create()
{
    var viewModel = new StoreManagerViewModel
    {
       Album = new Album(),
       Genres = storeDB.Genres.ToList(),
       Artists = storeDB.Artists.ToList()
    };

    return View(viewModel);
}

//
// POST: /StoreManager/Create

  [HttpPost]
  public ActionResult Create(Album album) 
  {
     if (ModelState.IsValid)
     {
        //Save Album
        storeDB.AddToAlbums(album);
        storeDB.SaveChanges();
        return RedirectToAction("Index");
     }

   // Invalid – redisplay with errors
   var viewModel = new StoreManagerViewModel
   {
      Album = album,
      Genres = storeDB.Genres.ToList(),
      Artists = storeDB.Artists.ToList()
   };
   return View(viewModel);
}

此示例考虑到Album只是模型中的一个表。我的主要问题在于我必须编码的方式,以便将另一个表格与FK包含在相册中。例如,如果AlbumVariant表 - 例如:field albumid-将FK显示到相册表 - 例如:field albumid - 。

我一直在尝试

[Authorize]
public ActionResult Create(int? id)
{
   var albumCreate= db.Album.Include(AlbumVariant)SingleOrDefault(a => a.AlbumId == id);
   var viewModel = new AlbumViewModelCreate()
   {
      AlbumCreate = albumCreate,
   };
}

但没有成功。任何帮助将不胜感激。 brdgs

1 个答案:

答案 0 :(得分:4)

您必须了解AlbumVariant表将AlbumId作为外键,这意味着必须首先生成AlbumId!你可以试试这个:

storeDB.AddToAlbums(album);
storeDB.SaveChanges();   
AlbumVariant av = new AlbumVariant {  
  ... 
  AlbumId = album.Id  //generates after calling the 1st save changes  
}  
storeDB.AddToAlbumVariant(av);   
storeDB.SaveChanges();