2016-10-02 135 views
1

时会一直插入dublicate对象为了解决这个问题,我确实需要一些帮助。当我尝试使用实体框架添加实体时,它会一直添加超过1个实体。实体框架在添加

在这里,您可以在添加2部电影后看到我的数据库。

enter image description here

正如你看到的,它增加了同一部电影“岩石”的两倍。

过去两天一直在研究这个问题,但还没有找到解决方案,没有给我例外。

代码:

public bool Execute(RequestedMovie movie) 
    { 
     using (var context = new MoviesContext()) 
     { 
      context.RMovies.Attach(movie); 
      context.RMovies.Add(movie); 
      context.SaveChanges(); 
     } 

     return true; 

    } 

型号:

public class RequestedMovie 
{ 
    [Key] 
    public int RequestedMoviesID { get; set; } 
    public string MovieId { get; set; } 
    public string MovieTitle { get; set; } 
    public string MovieLink { get; set; } 
    public string MovieYear { get; set; } 
    public int MovieQuality { get; set; } 
    public string Requester { get; set; } 
    public bool Status { get; set; } 

} 

的DataContext:

public class MoviesContext : DbContext, IMoviesContext 
{ 
    public MoviesContext() : base("MoviesContext") 
    { 

    } 

    // DbSet to bookings 
    public DbSet<Movie> Movies { get; set; } 
    public DbSet<RequestedMovie> RMovies { get; set; } 

    public void MarkAsAdded(Movie item) 
    { 
     Entry(item).State = EntityState.Added; 
    } 

    public void MarkAsDeleted(Movie item) 
    { 
     Entry(item).State = EntityState.Deleted; 
    } 

    public void MarkRequestedMovieAsAdded(RequestedMovie item) 
    { 
     Entry(item).State = EntityState.Added; 
    } 

    public void MarkRequestedMovieAsModified(RequestedMovie item) 
    { 
     Entry(item).State = EntityState.Modified; 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 

    } 
} 

这应该是相当两岸FORW因为我只有一张桌子,我要补充。是否尝试过与附加方法,我在另一叠后发现,但它仍然不会工作:(。

必须使用方法(MarkRequestedMovieAsAdded)我在我的上下文文件,而不是RMovies也试过。 ?加入(OBJEKT),但结果相同

可能是什么错在这里

+0

那么,你做'context.RMovies.Add(电影);'(前面的附加是无关紧要的)。因此,如果您再次输入与RequestedMovie相同的电影,它将被插入。英孚只会完成你要求它做的工作。 –

+0

我认为它与上下文有关,但我不确定..仍在研究这个!它只运行一次,因为我看到它,但插入两行。 – Mikkel

+0

好吧,所以它似乎只运行一次,但它插入两次。这是什么样的应用程序?哪个进程执行'Execute'方法? –

回答

1

只需使用:

context.RMovies.Add(movie); 
    context.SaveChanges(); 
+0

试了,结果一样。 – Mikkel

0

我设法解决这个问题,我没有做过在Web任何错误Api。它变成了ou t我的Angular2可观察的调用发生了错误,并且两次调用了我的web api,因为它是(冷)而不是(暖)。

下面是一篇关于它: Angular2 http.post gets executed twice

所有我应该做的是在我angular2服务映射后添加.share()。