C# ASP.NET实体框架插入(如果不存在)
嘿,小伙子们,姑娘们:) 我目前正在尝试实现一个c#/asp.net代码first entityframework数据库应用程序(在azure上),该应用程序将保存一个电影列表。每次我向应用程序索要电影时,它都会执行以下操作:C# ASP.NET实体框架插入(如果不存在),c#,asp.net,sql-server,entity-framework,azure,C#,Asp.net,Sql Server,Entity Framework,Azure,嘿,小伙子们,姑娘们:) 我目前正在尝试实现一个c#/asp.net代码first entityframework数据库应用程序(在azure上),该应用程序将保存一个电影列表。每次我向应用程序索要电影时,它都会执行以下操作: 查询数据库 如果在数据库中找不到,则查询TMDB 添加到数据库(无重复项) 我有一个工作的查询,我有一个工作的TMDB解析器,我可以向数据库添加东西。当我试图在我的关系中没有重复项时,问题就出现了 我的设置: 电影 public partial class Movies
public partial class Movies
{
public Movies() { this.Genres = new HashSet<Genres>(); /* [...] */ }
[Key]
public int Movie_ID { get; set; }
// [...]
public virtual ICollection<Genres> Genres { get; set; }
}
public partial class Genres
{
public Genres() { }
[Key]
public int Genre_ID { get; set; }
public string Genre_Name { get; set; }
}
数据库访问类
public partial class Movies
{
public Movies() { this.Genres = new HashSet<Genres>(); /* [...] */ }
[Key]
public int Movie_ID { get; set; }
// [...]
public virtual ICollection<Genres> Genres { get; set; }
}
public partial class Genres
{
public Genres() { }
[Key]
public int Genre_ID { get; set; }
public string Genre_Name { get; set; }
}
==>这里是我的问题出现的地方首先,您需要将
公共虚拟ICollection电影{get;set;}
添加到您的流派类中,以确保多对多关系
编辑
此外,我还看到您同时拥有db
和dataBaseContext
,这是错误的。
您必须使用相同的数据库上下文
我认为这样做应该奏效:
Movies daMov = new Movies();
// [...]
foreach ( string genre in movieGenres )
{
Genres daGenre = await db.Genres.FirstOrDefaultAsync(
m => m.Genre_Name == genre);
// doesn't exist - firstOrDefault() returns default
if ( daGenre == null || object.Equals(daGenre, default(Genres)))
{
daGenre = new Genres(); // create new in db
daGenre.Genre_Name = genre;
}
daMov.Genres.Add( daGenre );
db.Movies.Add(daMov);
await db.SaveChangesAsync();
}
版权所有©1990-2014 IMDb.com,Inc。。。。你有他们的书面许可来删除他们的网站吗?在此之前,您可能只是在浪费时间(好吧,直到他们决定阻止您的刮板):)不完全:(例外消息:“检测到类型为'dotNETproject1.WebAPI.Movies'。路径为'Genres[0].Movies'的自引用循环。”Asmodiel,你还在处理循环问题吗?什么时候会出现这个错误?.Net比序列化程序更能原谅关系循环。如果你正在进行Json或Javascript序列化,你可以用[ScriptIgnore]或[JsonIgnore]来修饰属性。这不是“如果不存在则插入”行为。这是“选择并插入”行为。它在高度并发的环境中不起作用。