IDbSetExtensions.AddOrUpdate có nghĩa là giúp viết mã hoạt động giống nhau cho dù cơ sở dữ liệu trống hoặc phổ biến. Nhưng liên kết các đối tượng cần mã khác nhau. Khi cơ sở dữ liệu trống, các đối tượng không có ID và bạn liên kết chúng bằng cách gán thuộc tính điều hướng. Tuy nhiên, khi các đối tượng đã tồn tại, các thuộc tính điều hướng không hoạt động và bạn cần phải đặt các khóa ngoại trực tiếp. Các thuộc tính điều hướng làm việc cho proxy trong cả hai trường hợp, với chi phí từ bỏ các POCO. Chỉnh sửa: Trên thực tế, proxy không hoạt động khi cả hai thực thể đều cũ.IDbSetExtensions.AddOrUpdate và các mối quan hệ
treo mẫu này trong SaveChanges thứ hai gọi, khi EF cố gắng thiết lập CountryID 0:
public class Country
{
public virtual int ID { get; set; }
public virtual string Name { get; set; }
}
public class Person
{
public virtual int ID { get; set; }
public virtual string Name { get; set; }
public virtual int CountryID { get; set; }
public virtual Country Country { get; set; }
}
public class Context : DbContext
{
public DbSet<Person> Person { get; set; }
public DbSet<Country> Country { get; set; }
}
class Program
{
static void Foo()
{
using (var db = new Context())
{
//var c = new Country();
var c = db.Country.Create();
c.Name = "usa";
db.Country.AddOrUpdate(x => x.Name, c);
//var p = new Person();
var p = db.Person.Create();
p.Name = "billg";
p.Country = c;
db.Person.AddOrUpdate(x => x.Name, p);
db.SaveChanges();
}
}
static void Main()
{
Database.SetInitializer<Context>(new DropCreateDatabaseAlways<Context>());
Foo();
Foo();
}
}
như thế nào AddOrUpdate sử dụng?
tôi khuyên bạn nên đọc nó http://thedatafarm.com/blog/data-access/take-care-with-ef-4- 3-addorupdate-method/ –