【发布时间】:2009-08-13 18:57:23
【问题描述】:
我从 X 类创建了一些项目。
我将它们添加到 de base,执行 SaveChanges 和所有这些...
类 Y 与 X 具有多对多关系。
使用另一个上下文,我创建了一个 Y 实例,将我创建的元素放入 X 的集合中。
我将 Y 添加到 Y 实体集,没关系。
当我执行 Context.SaveChanges() 时,我得到:
跨实体或关联的共享值在多个位置生成。检查映射是否不会将 EntityKey 拆分为多个服务器生成的列。
你见过这个错误吗?
编辑:一开始,我设置了 1-to-many,后来我注意到它实际上是 many-to-many。
EDIT 2:显示完成的方式。与使用 .net 的许多人不同,我们确实使用层(业务、数据......)。这是测试用例:
[TestMethod]
public void WorksWithAreaCategories()
{
using (new TransactionScope())
{
//arrange
var context = ContextFactory.Create();
var categoryBusiness = new CategoryBusiness(context);
var category = new Category
{
Name = "TestCategory###"
};
categoryBusiness.Add(category);
var areaBusiness = new AreaBusiness(context);
var area = new Area
{
Name = "TestArea###",
Description = "TestAreaDescription###",
Categories = new List<Category> {category}
};
//act
areaBusiness.Add(area);
//assert
var areaFromDb = areaBusiness.FindById(area.AreaID);
Assert.IsNotNull(areaFromDb.Categories);
Assert.IsTrue(areaFromDb.Categories.Count > 0);
Assert.IsTrue(areaFromDb.Categories.Any(c => c.CategoryID == category.CategoryID));
}
}
它们共享相同的上下文。业务层在每个 Add 结束时调用 SaveChanges。
【问题讨论】:
标签: c# visual-studio-2008 entity-framework