首页 新闻 搜索 专区 学院

Entity Framework使用Code First 插入数据时,多出来额外的数据

0
悬赏园豆:50 [已解决问题] 解决于 2014-05-19 11:21

在项目总使用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对象,而不是在数据库中创建任何新的数据了。

求大神提供解决方案啊


        
萧轩若怀的主页 萧轩若怀 | 初学一级 | 园豆:157
提问于:2014-05-19 00:00
< >
分享
最佳答案
1

第一句改成:Catalog catalog=context.DbSet<Catalog>().where(c=>c.ID==1); 试试,如果使用new,ef会认为你想插入一条新的记录,实际上你只是想使用原有记录作关联而已,因此先从数据库获取原有ID为1的记录,然后引用到CatalogClassify

收获园豆:50
nianhua11 | 小虾三级 |园豆:736 | 2014-05-19 08:32

还是会创建重复的数据

萧轩若怀 | 园豆:157 (初学一级) | 2014-05-19 09:58

@萧轩若怀: 能把提交数据的代码贴出吗?我这样测的没问题

nianhua11 | 园豆:736 (小虾三级) | 2014-05-19 10:42

@Weca: 你的方法没错。解决了,是我自己刚才的测试代码有问题,谢谢了

萧轩若怀 | 园豆:157 (初学一级) | 2014-05-19 11:21

@萧轩若怀: 你好 我也遇到你之前的这个问题了  能否给一下解决思路?

web小王子 | 园豆:179 (初学一级) | 2015-05-26 23:54

@Weca: 你好 我也遇到你所遇到的问题了 可以提供一个解决思路吗

web小王子 | 园豆:179 (初学一级) | 2015-05-26 23:54
其他回答(2)
0

用moon.orm,ef坑多

【秦时明月】 | 园豆:803 (小虾三级) | 2014-05-19 08:12
0

可能是在插入的时候有问题

平常心队长 | 园豆:1113 (小虾三级) | 2014-05-19 11:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册