我想在不加载对象的情况下将其添加到相关实体。我有这样定义的公司实体:
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();
}
}
我尝试了该代码,但无法正常工作。
假设您已定义公司和雇员实体,使其既具有从公司到其所有关联雇员的集合的导航属性,又具有从雇员到其单个关联公司的属性,则可以完成创建新雇员并将其与雇员数据库集中的现有公司。
[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] 删除。
我来说两句