0

“电影”表

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; }

我正在寻找的是构建模型以完成以下场景的策略:

  1. 管理员输入所有类型名称,之后不再添加

  2. 非管理员进入电影并在同一屏幕上提供一个下拉列表,其中包含所有“管理员键入”的流派名称

我的问题是,当他们创建电影时,linq 也想创建一个新的流派记录

我不想再创建任何流派记录,我只希望查看流派列表的表格

有什么建议么?

4

2 回答 2

2

我会更改属性名称和类名称以使其更具可读性。如果您将Genre表的主键列名称保留为GenreId,则 EF Codefirst 将创建名称为Genre_GenreId!! 的外键(在电影中)表。所以我将 Movie 类的主键列名称更改为 simple 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; }
}

现在在您的 UI 中,您提供了一个下拉列表,其中列出了可用的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列值设置为,假设您在 Genre 表中2有一条带有 ID 的记录2

于 2013-03-27T14:47:33.310 回答
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();
        // ...
    }
}

祝你好运。

于 2013-03-27T17:13:13.610 回答