【发布时间】:2011-03-11 07:53:40
【问题描述】:
在将关系保存到多对多关系时,我的 EF Code First 模型遇到了一些问题。我的模特:
public class Event
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
}
public class Tag
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Event> Events { get; set; }
}
在我的控制器中,我将一个或多个 TagViewModel 映射到 Tag 类型,并将其发送到我的服务层以进行持久化。此时通过检查实体Tag既有Id也有Name(Id是隐藏字段,在我看来名字是文本框)
当我现在尝试将标签添加到事件时出现问题。让我们看下面的场景:
事件已经在我的数据库中,假设它已经有相关标签C#, ASP.NET
如果我现在将以下标签列表发送到服务层:
ID Name
1 C#
2 ASP.NET
3 EF4
并通过首先从数据库中获取事件来添加它们,这样我就可以从我的 DbContext 中获得一个实际的事件,然后我只需这样做
myEvent.Tags.Add
添加标签。问题是在SaveChanges()之后我的数据库现在包含这组标签:
ID Name
1 C#
2 ASP.NET
3 EF4
4 C#
5 ASP.NET
这个,即使我保存的标签在我保存时设置了它的 ID(尽管我没有从数据库中获取它)
【问题讨论】:
-
在这里阅读我的答案:stackoverflow.com/questions/3635071/… 代码优先的情况仍然相同。
-
0 反对票 我很困惑。您是说您正在尝试为特定事件指定标签,但这些标签被添加到数据库的 TAGS 表中,而不仅仅是在连接表中创建新行?
-
@Julie - 完全正确。由于我首先使用 EF 代码,因此我不直接访问 EventTags 表,而只是将内容添加到 someEvent.Tags 集合...
标签: c# asp.net-mvc c#-4.0 entity-framework-4 ef-code-first