实体框架使用相关对象添加记录

时间:2012-09-28 09:48:19

标签: c# asp.net entity-framework

我们有以下AddUser方法,它使用EF将新记录添加到数据库:

    public User AddUser(User user)
    {
        using (var context = DataObjectFactory.CreateContext())
        {
            var userEntity = Mapper.Map(user);

            context.AddObject("UserEntities", userEntity);

            context.SaveChanges();

            return Mapper.Map(userEntity);
        }
    }

我们的用户类型是这样的:

public class User
{
    public string FirstName { get; set; }

    public string LastName { get; set; }

    public Customer Customer { get; set; }     
}

我们有一个Customer表和一个User表,在User表中我们有customerid作为外键。

在USER表中我们有Firstname,Lastname和CustomerId字段,我们从用户处获取firstname,lastname和customerid(客户下拉列表)详细信息,使用我们从用户处获得的customerid创建Customer对象并传递所有这些是AddUser方法,但是会发生的事情是用户被插入数据库并且新客户被插入到客户的表中(使用新的customerid),有什么方法可以阻止它吗?

由于

1 个答案:

答案 0 :(得分:2)

您需要将客户的EntityState设置为Unchanged

这样的东西
 context.Entry<Customer>(customer).State = EntityState.Unchanged; 

 context.ObjectStateManager.ChangeObjectState(userEntity.Customer, EntityState.Unchanged); 

(取决于您使用的上下文类型)

请参阅http://msdn.microsoft.com/en-us/data/jj592676.aspx