实体框架无需加载即可将对象添加到相关实体

丹尼尔(Daniele)

我想在不加载对象的情况下将其添加到相关实体。我有这样定义的公司实体:

public class Company
{
    public int ID { get; set; }
    public List<Employee> EmployeeList{ get; set; }       

} 

像这样的员工实体

    public class Employee
{
    public int ID { get; set; }
    public String Name{ get; set; }       
} 

我想将一个员工添加到放置在该公司对象中的列表中,而不加载所有员工。

我知道我可以使用此表达式,Company myCompany= systemBD.Companies.Include("EmployeeList").Find(1) myCompany.EmployeeList.Add(newEmployee) 但由于数据库中有成千上万的员工,因此恐怕会浪费很多时间。

有没有办法在不加载员工列表的情况下将新员工添加到现有公司?我一直在研究Attach方法,但它似乎不起作用。

        using (var systemDB = new CompanyDB())
        {
            Employee employee = new Employee ();                
            Company companySearch = systemDB.Companies.Where(d => d.Name.Equals("John")).SingleOrDefault();
            if (companySearch != null)
            {
                if (companySearch.EmployeeList != null)
                {
                    systemDB.Companies.Attach(companySearch );
                    companySearch.EmployeeList.Add(employee);
                    systemDB.SaveChanges();

                }

            }

我尝试了该代码,但无法正常工作。

埃里克·戴维斯(Eric Davis)

假设您已定义公司和雇员实体,使其既具有从公司到其所有关联雇员的集合的导航属性,又具有从雇员到其单个关联公司的属性,则可以完成创建新雇员并将其与雇员数据库集中的现有公司。

[Table("Company")]
public partial class Company
{
    public Company()
    {
        this.Employees = new HashSet<Employee>();
    }

    public int Id { get; set; }

    [Required]
    [StringLength(50)]
    public string Name { get; set; }

    public virtual ICollection<Employee> Employees { get; set; }
}

[Table("Employee")]
public partial class Employee
{
    public int Id { get; set; }

    [Required]
    [StringLength(50)]
    public string Name { get; set; }

    public int CompanyId { get; set; }

    public virtual Company Company { get; set; }
}

public partial class Database : DbContext
{
    public Database()
        : base("name=Database")
    {
    }

    public virtual DbSet<Company> Companies { get; set; }
    public virtual DbSet<Employee> Employees { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Company>()
            .Property(e => e.Name)
            .IsUnicode(false);

        modelBuilder.Entity<Company>()
            .HasMany(e => e.Employees)
            .WithRequired(e => e.Company)
            .WillCascadeOnDelete(false);

        modelBuilder.Entity<Employee>()
            .Property(e => e.Name)
            .IsUnicode(false);
    }
}

然后,假设您在系统中已经有一个ID为1的公司,则可以执行以下操作:

using (var database = new Database())
{
    var company = database.Companies.Find(1);
    if (company != null)
    {
        var employee = new Employee 
        { 
            Name = "John Doe",
            Company = company
        };

        database.Employees.Add(employee);
        database.SaveChanges();
    }
}

或...如果您确定公司ID 1确实存在...

using (var database = new Database())
{
    var employee = new Employee 
    { 
        Name = "John Doe",
        CompanyId = 1
    };

    database.Employees.Add(employee);
    database.SaveChanges();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用反射将对象动态添加到实体框架

来自分类Dev

将对象添加到实体框架上下文大约需要1.5秒

来自分类Dev

加载项无需代码即可将按钮添加到主页?

来自分类Dev

实体框架 - 用相关对象加载对象

来自分类Dev

无需压缩即可将文件添加到zip存档

来自分类Dev

无需密码即可将用户添加到Firebase

来自分类Dev

无需推送即可将项目添加到数组中

来自分类Dev

实体框架-有效删除所有子实体而无需加载它们

来自分类Dev

动态将属性添加到实体框架对象

来自分类Dev

实体框架加载相关实体

来自分类Dev

实体框架加载相关实体

来自分类Dev

实体框架代码优先6.0:是否有任何注释可将索引添加到列

来自分类Dev

休眠,无需加载关联实体即可获取外部ID

来自分类Dev

在实体框架中将项目添加到多对多实体

来自分类Dev

无需代码即可将实体链接到现有表

来自分类Dev

EF Core:一种无需事务即可将多个不相关的行添加到数据库中的有效方法?

来自分类Dev

加载相关对象时发生异常。实体框架

来自分类Dev

实体框架-长链相关对象的高效渴望加载?

来自分类Dev

实体框架核心:查询对象后加载相关数据

来自分类Dev

加载相关对象时发生异常。实体框架

来自分类Dev

实体框架无需询问即可填充子实体

来自分类Dev

无需登录即可将曲目添加到播放列表-API Spotify

来自分类Dev

无需重新启动即可将持久路由添加到 Debian 10

来自分类Dev

无需 root 即可将 OpenVPN 密钥添加到 Kali Linux

来自分类Dev

实体框架将用户添加到角色

来自分类Dev

使用实体框架将测试项目添加到MVC

来自分类Dev

实体框架将数据添加到多重表

来自分类Dev

在实体框架中添加到上下文

来自分类Dev

核心数据多对多关系在将对象添加到父实体时创建重复项

Related 相关文章

  1. 1

    使用反射将对象动态添加到实体框架

  2. 2

    将对象添加到实体框架上下文大约需要1.5秒

  3. 3

    加载项无需代码即可将按钮添加到主页?

  4. 4

    实体框架 - 用相关对象加载对象

  5. 5

    无需压缩即可将文件添加到zip存档

  6. 6

    无需密码即可将用户添加到Firebase

  7. 7

    无需推送即可将项目添加到数组中

  8. 8

    实体框架-有效删除所有子实体而无需加载它们

  9. 9

    动态将属性添加到实体框架对象

  10. 10

    实体框架加载相关实体

  11. 11

    实体框架加载相关实体

  12. 12

    实体框架代码优先6.0:是否有任何注释可将索引添加到列

  13. 13

    休眠,无需加载关联实体即可获取外部ID

  14. 14

    在实体框架中将项目添加到多对多实体

  15. 15

    无需代码即可将实体链接到现有表

  16. 16

    EF Core:一种无需事务即可将多个不相关的行添加到数据库中的有效方法?

  17. 17

    加载相关对象时发生异常。实体框架

  18. 18

    实体框架-长链相关对象的高效渴望加载?

  19. 19

    实体框架核心:查询对象后加载相关数据

  20. 20

    加载相关对象时发生异常。实体框架

  21. 21

    实体框架无需询问即可填充子实体

  22. 22

    无需登录即可将曲目添加到播放列表-API Spotify

  23. 23

    无需重新启动即可将持久路由添加到 Debian 10

  24. 24

    无需 root 即可将 OpenVPN 密钥添加到 Kali Linux

  25. 25

    实体框架将用户添加到角色

  26. 26

    使用实体框架将测试项目添加到MVC

  27. 27

    实体框架将数据添加到多重表

  28. 28

    在实体框架中添加到上下文

  29. 29

    核心数据多对多关系在将对象添加到父实体时创建重复项

热门标签

归档