我有一个对象Atlas,包含另一个对象Customers.既Customers集合是Atlas的一个属性。我在窗体加载的时候把所有Customer取出来,绑定到combobox.datasource上。
combobox1.DataSource = customers;
然后我有一个按钮,当我点击的时候就把选中的selectedItem放到一个IList<Customer>里,变量名假定是ss.然后我封装atlas对象,让atlas.customers = ss; 提交之后却发现表中新增了我选定的SS。而不是引用关系。我的理解是Customer被当做新对象处理了。我该怎么做才能“引用”。而不是NEW一个新的Customer出来。求高人指点啊。和Entry.Status有关系吗?正确的status应该是什么呢?还是说我绑定到combobox的时候这个对象就被认为是新的了?我应该如何做,谢谢。
combobox1.DataSource = customers;
然后我有一个按钮,当我点击的时候就把选中的selectedItem放到一个IList<Customer>里,变量名假定是ss.然后我封装atlas对象,让atlas.customers = ss; 提交之后却发现表中新增了我选定的SS。而不是引用关系。我的理解是Customer被当做新对象处理了。我该怎么做才能“引用”。而不是NEW一个新的Customer出来。求高人指点啊。和Entry.Status有关系吗?正确的status应该是什么呢?还是说我绑定到combobox的时候这个对象就被认为是新的了?我应该如何做,谢谢。
代码在办公室里,我并没有修改,Customer和atlas是多对多,我只是希望当我把Customer集合赋值给Atlas的时候,在表中反应出来是这样的
AtlasID 其余属性
1 XXXXXXX
CustomerID 其余属性
1 XXXXXXX
2 XXXXXXXX
3 XXXXXXXXXAtlasID CustomerID
1 1
1 2那么意味着Customer1和2是Altas1的属性
现在的问题是当我把selectedItem添加到Altas的集合中时,在Customer表中会多新建几条Customer出来 就跟我不是用selectedItem找出来的一样。到底是哪里错了。通常在new Customer()这种操作的时候才能这样。
刚才我想里一样,可能是我在取对象的时候不能直接用selectedItem吧.也许应该这样做,combobox.item[combobox.selectedIndex].明天去试试吧只能。不过我感觉一样会出错。我想我绑定的集合中的对象与我取出来的对象应该不是同一个。哎 ,到底该怎么搞?难道要封装Atlas前根据选到的ID重新去查一次,那我就崩溃了……
//COMBOBOX的displaymember是name,valuemember是ID
//绑定
combobox.DataSource = sdfdf.ToList();//假设sdfsdf就是我查询出来的所有的Customer集合吧。
IList<Customer> ss = new List<Customer>();
//我选择一个Customer的时候,就让
ss.Add((Customer)combobox.selectedItem); //这里必须强转,估计这里出的问题
Altas a = new Altas();
//提交前一大堆赋值操作
a.Customers = ss;//给altas.customer赋值。
using(ModelContex mc = new ModelContext())
{
mc.Altas.Add(a);
mc.SaveChanges();
}
我记忆中就是这种思路吧。大婶们救命啊 呜呜。以前用nhibernate这样做是没有问题的。
public bool Add(AnyMeter anyMeter,User user)
{
using (ModelContextContainer cc= new ModelContextContainer())
{
anyMeter.User = user;
cc.AnyMeters.Add(anyMeter);
return cc.SaveChanges() == 1 ? true : false;
}
}比如说这个方法,user是一个在数据库中已经存在的对象。我是想把已经在方法外部包装的好的anymeter提交到数据库,同时,anyMeter与这个user建立联系。可是结果却是,anymeter被保存到数据库,且同时与user建立了联系,但是,这个user不是我之前存在的USER,它又弄了一个新的到数据库去,anymeter引用的是这个新生成的user。 我该怎么办?