2 zhpsdbx zhpsdbx 于 2014.05.19 00:04 提问

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

在项目总使用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对象,而不是在数据库中创建任何新的数据了。
求大神提供解决方案啊

1个回答

feiyun0112
feiyun0112   Rxr 2014.05.19 09:19

这里就不要新建
Catalog catalog = new Catalog(1,"MyName")

而是从数据库把id=1的找出来

zhpsdbx
zhpsdbx 采用Code First是不用写映射的
大约 4 年之前 回复
zhpsdbx
zhpsdbx 问题已经解决了,直接从数据库上下文中获取相应的Catalog对象注意不要在转换为C#对象(我的错误是把它转换为C#对象才导致的),然后在把该对象传递给CatalogClassify的构造函数即可
大约 4 年之前 回复
feiyun0112
feiyun0112 不加Map,从数据库加载CatalogClassify时怎么映射对应的catalog ?
大约 4 年之前 回复
zhpsdbx
zhpsdbx 就像上面那样啊,没有写任何Map,都是默认生成的。
大约 4 年之前 回复
feiyun0112
feiyun0112 CatalogClassify和Catalog的Map怎么写的
大约 4 年之前 回复
zhpsdbx
zhpsdbx db.CatalogClassifyes.Add(myCatalog); db.SaveChanges();
大约 4 年之前 回复
feiyun0112
feiyun0112 你保存的代码?
大约 4 年之前 回复
zhpsdbx
zhpsdbx 还是一样,会添加重复的数据
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!