【问题标题】:Entity Framework : adding record with related data实体框架:添加带有相关数据的记录
【发布时间】:2014-04-15 10:56:45
【问题描述】:

我有一个非常简单的情况,有 2 张桌子

public class Movie
{
    [Key]
    public Guid ID { get; set; }
    public string Name { get; set; }
    public byte[] Hash { get; set; }
    public int GenreID{ get; set; }
    [ForeignKey("GenreID")]        
    public virtual Genre genre{ get; set; }
}

public class Genre
{
    public int ID { get; set; }
    public string Name { get; set; }
}

现在,在导入序列中,我想创建新电影并将流派与流派表中的现有条目链接,或者如果它们不存在,则创建新的流派条目。

Movie m = new Movie();
m.ID = Guid.NewGuid();
IndexerContext db = new IndexerContext();
var genre = db.Genre.Where(g => g.Name== genreValue).FirstOrDefault(); 
if(genre!= null)
{
   m.GenreID= genre.GenreID;
}
else
{
   genre= new Genre();
   genre.Name = genreValue;
   db.Genres.Add(genre);
   var genreCreated= db.Genre.Where(g => g.Name== genreValue).FirstOrDefault();                                
   m.GenreID= genreCreated.GenreID;
}

现在的问题是,它不起作用。最后一行失败,因为genreCreated 为空。 另外,我想我一定是做错了——在Entity Framework 中并没有那么难。

谁能帮帮我?

【问题讨论】:

    标签: asp.net sql asp.net-mvc database entity-framework


    【解决方案1】:
    db.Genres.Add(genre);
    

    这不会向数据库发送插入语句 - 这会指示实体框架在保存更改时应插入新记录。 您致电 db.SaveChanges() 之后,类型将被保存(并且创建的 ID 可用);就目前而言,您没有保存调用,因此genreCreated 为空。

    在您的情况下 - 修复很简单,您不需要从 db 中选择 genreCreated。只需将 m.Genre 设置为新值即可完成这项工作

    Movie m = new Movie();
    m.ID = Guid.NewGuid();
    IndexerContext db = new IndexerContext();
    var genre = db.Genre.Where(g => g.Name== genreValue).FirstOrDefault(); 
    if(genre! = null)
    {
       m.GenreID = genre.GenreID;
    }
    else
    {
       genre = new Genre();
       genre.Name = genreValue;
       m.Genre = genre;
    }
    db.SaveChanges(); //m.GenreID will automatically be set to newly inserted genre
    

    【讨论】:

      【解决方案2】:

      在添加语句之后你需要保存它: 试试

      genre= new Genre();
      genre.Name = genreValue;
      db.Genres.Add(genre);
      db.SaveChanges();
      

      【讨论】:

        猜你喜欢
        • 2012-09-20
        • 1970-01-01
        • 1970-01-01
        • 2013-06-30
        • 1970-01-01
        • 1970-01-01
        • 2021-12-04
        • 2021-05-03
        • 1970-01-01
        相关资源
        最近更新 更多