我有以下情况
我正在尝试使用dbase中的现有地址来保存雇主。我已经保存并存储了地址。我只想用一个链接地址来保存雇主。
我认为附加会很好,这似乎可以正常工作,当我有一个新的地址'我想保存。但是,一旦我尝试将雇主与现有地址联系起来,就会出现问题。
保存好的东西 - 保存雇主和地址的相关链接。但是在下一次传递(保存)时,链接被破坏(新记录采用链接)。
我参加EF7 RC1决赛。
public class ApplicationDbContext : DbContext
{
public virtual DbSet<Employers> Employers{ get; set; }
public virtual DbSet<Address> Addresses { get; set; }
}
public class Employer
{
public int Id { get; set; }
public string Title { get; set; }
public virtual Address Address { get; set; }
}
for (int i = 0; i < 10; i++)
{
Employer item = new Employer();
// 2 address seeds - so toggle between them
if(i % 2 == 0)
{
item.Address = _dbContext.Addresses.Single(s => s.Postcode == "one address");
}
else
{
item.Address = _dbContext.Addresses.Single(s => s.Postcode == "second address");
}
_dbContext.Attach(item.Address);
_dbContext.Courses.Add(item);
_dbContext.SaveChanges();
}
答案 0 :(得分:0)
我遇到的问题是由关系定义引起的
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// add the relationship
modelBuilder.Entity<Employer>().HasOne(u => u.Address).WithOne();
}
GitHub上 ajcvickers 的解释澄清了它
地址和员工之间存在一对一的关系。这意味着每个地址只能与一个员工相关联。通过循环的每次迭代都会将地址分配给新的Employee,从而导致它从前一个Employee中取消分配。我不确定您要模拟的是什么,但您可能需要一对多的关系,以便许多员工可以共享相同的地址。如果是这样,请将您的关系映射更改为:
modelBuilder.Entity<Employer>().HasOne(u => u.Address).WithMany();