使用子对象添加对象

时间:2016-01-23 18:08:10

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

我有一个有2个子对象的对象: 对象是客户。其中一个子对象是国家,例如:customer.Country = country; 国家表不可更改。 customers表是可以改变的。 我正在尝试使用EF添加新客户:

Context.Customers.Attach(customer);
Context.Entry(customer).State = EntityState.Added;        
var newEntry = DbSet.Add(customer);
return Context.SaveChanges() > 0

在第一次测试中它运作良好。但由于一些奇怪的原因,它不再起作用了:它说子对象已经存在于数据库中。 这段代码有什么问题,请指教一下?

PS 我已使用以下代码解决了此问题:

 Context.Countries.Attach(customer.Country);
 var newEntry = DbSet.Add(customer);
 Context.SaveChanges();

但我不完全确定这是否正确

PPS 刚刚再次测试了第二种方法,但它失败了,虽然它只运行一次......这很奇怪......

2 个答案:

答案 0 :(得分:0)

如果添加带有子元素的元素,子元素也将添加到数据库中。如果添加具有相同子元素的新客户,EF将尝试再次添加子元素,这将(当然会失败)。

如果你有一个子元素,需要分配给一个新元素(例如country to customer),你需要从数据库中加载子元素,如下所示:

Country country = Context.Countries.Find(countryId);
customer.Country = country;
Context.Customers.Add(customer);
Context.SaveChanges();

答案 1 :(得分:0)

要在entityframework中向表中添加对象,您可以执行以下任一操作。

var country = Context.Countries.First( x => x.Id == 1 );
customer.Country = country; 

Context.Customers.Add( customer );

刚刚调用Context.SaveChanges(),实体将被添加到数据库中。