我有一个对象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的时候这个对象就被认为是新的了?我应该如何做,谢谢。

解决方案 »

  1.   

    我在load的时候绑定了所有customer到combobox的datasource,这是前提。
    代码在办公室里,我并没有修改,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重新去查一次,那我就崩溃了……
      

  2.   


    //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这样做是没有问题的。
      

  3.   

    你的 Altas 和Curstomers之间已经建立的联系  EF 实体操作的时候  他们在SaveChanges()之前是不会提交数据库的  你在Altas的属性上附上了一个Curstomers的 值   而又执行的是Add操作  他不仅会添加Altas数据  同时会把增添 Altas上关联的属性(即数据中存在的表)不为null的数据也会添加到数据库中  这时候   你如果不想添加附属的属性  你就不要给他们赋值  添加之后会用到  建议添加后在复制   EF他是会在实体上添加标记的   你的任何操作标记他都会记录下来  当你执行SaveChanges的时候 他自然会把所有的标记都执行掉。建议 :你的问题不仅要说问题 还要简要说一下需求 这样有助于别人帮你解决问题
      

  4.   

    是这样的,
    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。  我该怎么办?