【问题标题】:Entity Framework One-To-Many issue实体框架一对多问题
【发布时间】:2014-08-06 11:11:09
【问题描述】:

我在我的项目中使用实体框架。我遇到了一些麻烦。

我有两节课。他们是:

public class User
{
    public virtual Guid Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public virtual string Username { get; set; }
    public string Email { get; set; }
    public virtual Company Company { get; set; }
}

public class Company
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Requisites { get; set; }
    public virtual List<User> Workers { get; set; }
}

我也有回购。因此,当我创建一个新用户并且想将此用户添加到公司时。 我应该如何实施?我有两种方法:

  1. user.Company = company;
  2. company.Workers.Add(user);

哪种方式更可取?

【问题讨论】:

    标签: c# entity-framework ef-code-first code-first


    【解决方案1】:

    如果company 已经附加到上下文中。

    要么

    var company = db.Set<Company>().Find(companyId);
    

    db.Set<Company>().Attach(company);
    

    user.Company = 公司;

    在第一种情况下,如果您只这样做。用户不会被添加到数据库中,您也需要拥有这个。

    db.Entry(user).State = EntityState.Added;
    

    db.Set<User>().Add(user);
    

    然后将添加用户并与公司建立关系。

    company.Workers.Add(user);

    只有这一个应该没问题,用户将被添加并与公司有关系。但是要注意如果Workers为null,需要先实例化。

    【讨论】:

    • 非常感谢!但是如果用户和公司已经存在怎么办。那么哪种方式更好地将用户分配给公司(在他们之间建立关系)?
    • 是的,如果两者都已经存在,我认为最好使用assignment,它也会将用户从以前分配的公司中删除,但请记住用户必须在Modified State并且公司必须在附上或在Unchanged State,查看我的其他答案here
    • 好的!如果我想解除员工与公司的绑定怎么办。哪个更好? company.Workers.Remove(worker);或 worker.Company = null; ?如果我使用第一种方式,它只会删除关系,或者它也会从数据库中删除工作人员?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    相关资源
    最近更新 更多