在项目总使用Code First遇到坑爹的问题了
例如我有如下类:
public class Catalog { public Int32 ID { get; set; } public String CatalogName { get; set; } public Catalog() { } public Catalog(Int32 ID, String Name) { this.ID = ID; this.CatalogName = Name; } }
然后有另一个类引用该类:
public class CatalogClassify { public Int32 ID { get; set; } public Catalog catalog { get; set; } public String Name { get; set; } public CatalogClassify(){ } public CatalogClassify(Int32 ID, Catalog catalog, String Name){ this.ID = ID; this.catalog = catalog; this.Name = Name; } }
这两个类都映射到数据库中并存储起来。
假如我已有一个Catalog对象映射到数据库其数据库中相应的数据为:{1,"MyName"};
而我现在要一个CatalogClassify对象也插入到数据中其代码为:
Catalog catalog = new Catalog(1,"MyName") CatalogClassify myCatalog = new CatalogClassify(1,catalog,"TestName");
然后在将myCatalog对象插入到数据库中,这时会发现在Catalog对象对应的表中有两行数据,分别为{1,"MyName"},{2,"MyName"}.
但是这不是我想要的结果,我只是想让myCatalog对象引用一个已有的Catalog对象,而不是在数据库中创建任何新的数据了。
求大神提供解决方案啊
第一句改成:Catalog catalog=context.DbSet<Catalog>().where(c=>c.ID==1); 试试,如果使用new,ef会认为你想插入一条新的记录,实际上你只是想使用原有记录作关联而已,因此先从数据库获取原有ID为1的记录,然后引用到CatalogClassify
还是会创建重复的数据
@萧轩若怀: 能把提交数据的代码贴出吗?我这样测的没问题
@Weca: 你的方法没错。解决了,是我自己刚才的测试代码有问题,谢谢了
@萧轩若怀: 你好 我也遇到你之前的这个问题了 能否给一下解决思路?
@Weca: 你好 我也遇到你所遇到的问题了 可以提供一个解决思路吗
可能是在插入的时候有问题