1

这都是可重构的,所以如果有更好的方法来处理整体情况,请告诉我。这话太罗嗦了,抱歉。


我正在创建一个电影数据库,我有 3 个表MoviesGenresMovieToGenre. 我已经创建了Genre表格,并且为了填充MtG表格,我试图将 agenre_id与 a相关联movie_id,我认为这是一对多的关系,所以它会有类似下面的内容

movie_id | genre_id
1    56
1    786
2    232
2    656

但我的问题是,为了填充该表,我需要模型中movie_id的。Movie我假设一旦我将 ' 添加MovieMovies表中,模型将追溯更新其movie_id属性,但情况似乎并非如此,因为MovieToGenre表中填充了movie_id' 等于 0,即默认值。该Movies表正在使用正确的movie_id,因此只需告诉我的FillMovieToGenre方法哪部电影有什么movie_id

我正在使用的一般过程是以下循环:

  1. 创建Movie实例,而不是设置movie_id,因为 MVC 自己选择一个

    一种。movie = new Movie(data1, data2)

  2. Movie实例添加到表

    一种。 db.Movies.Add(movie)

  3. 在 方法中使用最后一个Movie实例。movie_idFillMovieToGenreTable()

    一种。FillMtGTable(movie)但是在这一点上,电影不包含非默认值movie_id,因此MtG表中填充了movie_id = 0,它应该在哪里movie_id = 1231等。

  4. 转到 1。

tl;dr 可以获得最近添加的模型的主键吗?似乎进行新查询不是一个好主意,因为我正在循环遍历我需要添加的所有电影,并且我认为新查询会减慢进程。

Movie在课堂的相关部分编辑

public class Movie
{
    [Key]
    public int movie_ID { get; set; }

    [DisplayName("Title")]
    public string title { get; set; }
 }

public class Genre
{
    [DisplayName("Genre ID")]
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int genre_ID { get; set; }

    [DisplayName("Genre")]
    public string genre_string { get; set; }
}

public class MovieToGenre
{

[Key]
    public int movie_to_genre_ID { get; set; }

    public virtual int movie_ID { get; set; }

    public virtual int genre_ID { get; set; }
}
4

1 回答 1

1

在 EF 中保存更改后,换句话说,在运行后

db.Movies.Add(movie)
db.SaveChanges();

EF 应该自动为您提供填充的 ID

int movie_id=movie.movie_id;
于 2012-12-06T06:04:42.120 回答