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 クラスの主キー列名を単に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 で、AvailableGenreレコードを一覧表示するドロップダウンを提供します。ユーザーがフォームを送信したら、このように保存します

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) である項目を見つけます。Genre テーブルに ID を持つレコードがあると仮定すると、これにより新しいレコードが movie テーブルに追加GenreIDされ、列の値がに設定されます。22

于 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 に答える