“电影”表
public int movieId { get; set; }
public String movieName { get; set; }
public virtual Genres Genres { get; set; }
“类型”表
public int genreId { get; set; }
public String genreName { get; set; }
我正在寻找的是构建模型以实现以下场景的策略:
管理员输入所有类型名称,之后不再添加
非管理员输入电影,并在同一屏幕上提供包含所有“管理员类型”类型名称的下拉列表
我的问题是,当他们制作电影时,linq还想创建一个新的类型记录
我不想再创建任何类型的记录,我只想看表格的类型列表
有什么建议吗?
答案 0 :(得分:2)
我会更改属性名称和类名,使其更具可读性。如果将Genre
表的主键列名称保留为GenreId
,则EF Codefirst将创建名为Genre_GenreId
!!的外键(在电影中)表。所以我将Movie类的主键列名称更改为ID
,以便它将生成外键列Genre_ID
public class Movie
{
public int ID { get; set; }
public String MovieName { get; set; }
public virtual Genre Genres { get; set; }
}
public class Genre
{
public int ID { get; set; }
public String Name { get; set; }
}
现在,在您的用户界面中,您会在下拉列表中列出Avaialble Genre
记录。当用户提交表单时,请像这样保存
using (YourDBContext dbContext = new YourDBContext())
{
Movie movie= new Movie { MovieName = "Read it from UI Please" };
var genr=dbContext.Find(2);
// TO DO : replace 2 by selected value from dropdown in the UI
movie.Genres =genr;
dbContext.Movies.Add(movie);
dbContext.SaveChanges();
}
首先从db上下文加载Genre对象,并将其设置为新影片对象的Genres
属性。我们使用Find
方法来查找主键是传递给该函数的值的项(在本例中为2)。这将向影片表添加新记录,并将GenreID
列值设置为2
,假设您的流派表中有ID 2
的记录
答案 1 :(得分:0)
在创建新Genre
时创建新的Movie
没有任何意义,插入Movie
时可能会出错。以下是使用EF和MVC进行操作的提示:
// Model with foreign key
public class Movie {
public int MovieId { get; set; }
public string Name { get; set; }
public Genre Genre { get; set; }
public int GenreId { get; set; }
}
public class Genre {
public int GenreId { get; set; }
public string Name { get; set; }
}
// Movie Controller setting the genres for the view
public ViewResult Create() {
// ...
var genres = repository.Genres.All();
ViewBag.GenreId = genres;
}
// View
@Html.DropDown("GenreId")
// Movie controller, GenreId on the model will be
// automatically populated via model binding and the
// correct genre will be inserted
[HttpPost]
public ActionResult Create(Movie movie)
{
if (ModelState.IsValid)
{
repository.Movies.Add(movie);
repository.SaveChanges();
// ...
}
}
祝你好运。