在Ef 6.0中,一对多和多对一插入

时间:2014-05-10 07:15:18

标签: entity-framework repository-pattern

医生有一个学位,一个学位有很多医生, enter image description here  好吧,当我尝试添加新的医生ef 6.0(DbContext)时,将选定的度数作为新的记录在度读表中插入 我不知道为什么?

插入方法:

public bool Insert<T>(T entity) where T : class
    {
        bool result = false;
        try
        {
            Context.Set<T>().Add(entity);
            result  = Context.SaveChanges() > 0;
        }
        catch (Exception exp)
        {
            result = false;
            fnLogExceptions(exp);
        }
        return result;
    }

插入部分:

private void btnSave_Click(object sender, EventArgs e)
    {
        var dr = new DB.Doctors();
        ...
        dr.Degrees = dropDownList_Degree.SelectedItem as DB.Degrees;
        ...
        using (var ctx = new Context())
        {
             opState = ctx.Insert<DB.Doctors>(dr);
        }
        ...
    }

成功插入新医生,但也插入了所选学位的新副本

提前致谢

1 个答案:

答案 0 :(得分:0)

您尝试分配的学位不是来自数据库,而是来自dropodown列表。所以EF认为它是新的,因此插入一个新的学位。

您需要从数据库中检索现有学位。

var dr = new DB.Doctors();

int selectedDegreeID = (int)dropDownList_Degree.SelectedItem.Value;

using (var ctx = new Context())
{
    dr.Degree = ctx.Degrees.Find(selectedDegreeID); // Retrieval and assignment.

    opState = ctx.Insert<DB.Doctors>(dr);
}