[英]EF core one-to-many relationships HasOne().WithMany() vs HasMany().WithOne()
[英]Ef7 One To many relationships HasOne WithMany and Attatch
我有以下情況
我試圖用dbase中的現有地址保存雇主。 我已經保存並存儲了地址。 我只想保存一個帶有鏈接地址的雇主。
我以為attach會很好,當我有一個要保存的新“地址”時,這似乎可以正常工作。 但是,一旦我嘗試將雇主與現有地址聯系起來,就會出現問題。
事情保存正常-雇主和地址的相關鏈接已保存。 但是隨后在下一個傳遞(保存)時,鏈接斷開了(新記錄使用了link)。
我正在使用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();
}
我遇到的問題是由關系定義引起的
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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.