EntityFrameworkCore 中的 Attach 方法


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);
//不報異常


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM