【发布时间】:2016-05-04 02:51:46
【问题描述】:
我有两个模型 Film 和 Rating 在数据库中反映为具有相同名称的表,它们都有 Guid Id 并且通过 FilmRating 表(没有模型)相互关联。
为了生成 FilmRating 表,我在每个模型列表中都引用了另一个,例如。 List<Film> RatedFilms 和 List<Rating> Ratings。
当我尝试将记录添加到 Rating 表时,问题就出现了,这也会将记录添加到 FilmRating 表。我有以下代码:
public void AddNewRating(Rating newRating, Film ratedFilm)
{
// Add rated film to the rating collection
if(newRating.RatedFilms == null)
{
newRating.RatedFilms = new List<Film>();
}
newRating.RatedFilms.Add(ratedFilm);
using (var context = new IW5Context())
{
context.Ratings.Add(newRating);
context.SaveChanges();
}
}
ratedFilm 是从数据库中检索到的对象,它表示应该与评级相关的电影。 IW5Context 只是继承 DbContext 的类。
上面写着:
{"违反 PRIMARY KEY 约束 'PK_dbo.Film'。无法在对象 'dbo.Film' 中插入重复键。重复键值为 (5fd7ab30-b681-46d5-b34b-64afe0d1cfcb)。\r\n语句已终止。"}
据我了解,它会尝试将电影插入数据库,而我希望它只会将记录添加到 Rating 表和 FilmRating 表(并可能检查 Film 表中是否存在电影)。
我应该怎么做才能让它工作?
编辑 - 添加电影和评级模型:
public class Rating : BaseObject
{
public double RatingValue { get; set; }
public string TextRating { get; set; }
public DateTime TimeAdded;
public List<Film> RatedFilms { get; set; }
}
public class Film : BaseObject
{
...
public List<Rating> Ratings
{
get; set;
}
}
Id 列是 Guid 的类型,并且从 BaseObject 继承(与 string Name 一起)。
AddNewRating 通过从 ICommand 实现方法调用的方法从另一个项目调用(但被调用)。
【问题讨论】:
-
Film和Rating看起来像什么,你怎么称呼AddNewRating。 SSCCE 会很有帮助,因为现在,我们不得不猜测是什么情况导致了您的问题 -
@SamIam 我更新了答案,谢谢你的建议。
-
我想看到的部分内容是主键是如何定义的,以及
newRating和ratedFilm的来源。如果你能把它包括在内,那会很有帮助
标签: c# entity-framework-6