Attach 的坑
Model |
Filed |
Database Value |
Console Value |
User |
Phone |
+123000000000 |
+12333333333 |
User |
Email |
null |
eeeeeee |
User |
Id |
1 |
1 |
dbcontext.Users.Add(new User()
{
UserName = "test1",
CreatedAt = DateTime.Now
Phone = "+1230000000"
});
dbcontext.SaveChanges();
var user = new User()
{
Id = 1,
Phone = "+12333333333",
Email = "eeeeeeee"
};
dbcontext.Users.Attach(user);
//上面語句會拋異常,原因是dbcontext 已經跟蹤了一個相同Id的實體,所以使用Attach注意當前的上下文
var user = new User()
{
Id = 1,
Phone = "+12333333333",
Email = "eeeeeeee",
UpdatedAt = DateTime.Now
};
var entryEntity = dbContext.Users.Attach(user1);
//entryEntity.State = EntityState.Unchanged; 有沒有這句話結果是一樣的
entryEntity.Property(p => p.Phone).IsModified = true;
entryEntity.Property(p => p.Email).IsModified = false;
dbContext.SaveChanges();
//數據庫中只有明確標為`IsModified`為`true`的 `Phone`的值更改了,其余值保持不變
var item = dbContext.Users.FirstAsync().Result;
//item 的值和 user 中值完全相同
var user = new User()
{
Id = 1,
Phone = "+12333333333",
Email = "eeeeeeee",
UpdatedAt = DateTime.Now
};
var entryEntity = dbContext.Users.Attach(user1);
entryEntity.State = EntityState.Modified;
entryEntity.Property(p => p.Phone).IsModified = true;
entryEntity.Property(p => p.Email).IsModified = false;
dbContext.SaveChanges();
//數據庫中只有明確標為`IsModified`為`false`的 `Emial`的值沒有更改,其余值都會做更改
var item = dbContext.Users.FirstAsync().Result;
//item 的值和 user 中值完全相同
var user = dbContext.Users.FirstAsync().Result;
var userTemp = new User { Id = 1 };
dbContext.Users.Attach(userTemp);
//報異常,原因同例1
var user = dbContext.Users.AsNoTracking().FirstAsync().Result;
var userTemp = new User { Id = 1 };
dbContext.Users.Attach(userTemp);
//不報異常