相关疑难解决方法(0)

阻止实体框架为导航属性插入值

我正在使用Entity Framework 4.0处理WPF应用程序.当我尝试保存对象时,我得到了一个主键异常,但主键是一个AutoIncremented字段,我无法理解异常的原因.

所以在尝试了这个和那个,以及一些调试和使用SQL分析器后,我发现在插入我的对象之前,必须在父表中插入一条记录,因为我设置了该对象的导航属性.

所以关键是如果尝试插入Employee对象并将其部门设置为Employee.Department = deptObject,则将新记录设置为插入部门对象.

请告诉我某些导航属性对象不会插入数据库,任何属性或任何方法,Anything.

谢谢

c# wpf entity-framework

14
推荐指数
1
解决办法
1万
查看次数

使用现有对象插入新对象

我是EF 4的新手,这是我到目前为止所做的:

  • 根据我的数据库创建edmx文件
  • 为我的对象(PO​​CO)创建代码生成.现在我有了一个model1.tt,扩展后我会看到我的课程
  • 基于IRepository为每个类创建一个存储库

现在,我正在处理两个对象,A和B.对象A具有类型B的属性.在我的winform中,我有一个组合填充了类型B的对象.当按下保存按钮时,A类的新实例是创建并设置所有属性.对象B属性设置如下:

objectA.myObjectB = (objectB)cmbBObjects.selectedItem;
Run Code Online (Sandbox Code Playgroud)

然后我为objectA创建一个存储库并调用save方法.在这个保存方法中,我有这个代码±

public bool Save(ObjectA obj)
{
  using(MyContext context = new MyContext())
  {
    context.objectAs.AddObject(obj);
    context.SaveChanges();
  }
}
Run Code Online (Sandbox Code Playgroud)

这段代码确实为数据库保存了一个新条目,但它也为对象B创建了一个新记录!我不想要这个,因为对象B已经存在于数据库中!(我从组合框中选择了这个).

这就是我填充组合框的方式:

在objectB存储库中:

public IList<ObjectB> GetAll()
{
    using(MyContext context = new MyContext())
    {
        IList<ObjectB> objects = context.objectBs.ToList();
        return objects;
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的形式:

ObjectBRepository rep = new ObjectBRepository();
IList<ObjectB> objects = rep.GetAll;

cmbBObjects.Datasource = objects;
// etc..
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,如何在不为objectB创建新记录的情况下保存对象A?

.net c# entity-framework entity-framework-4

8
推荐指数
1
解决办法
9283
查看次数

标签 统计

c# ×2

entity-framework ×2

.net ×1

entity-framework-4 ×1

wpf ×1