ASP.NET MVC - Không thể đính kèm một thực thể thuộc loại 'MODELNAME' vì một thực thể khác cùng loại đã có cùng giá trị khóa chính


122

Tóm lại, ngoại lệ được đưa ra trong mô hình trình bao bọc POSTing và thay đổi trạng thái của một mục nhập thành 'Đã sửa đổi'. Trước khi thay đổi trạng thái, trạng thái được đặt thành 'Đã tách rời' nhưng việc gọi Đính kèm () sẽ gây ra lỗi tương tự. Tôi đang sử dụng EF6.

Vui lòng tìm mã của tôi bên dưới (tên kiểu máy đã được thay đổi để dễ đọc hơn)

Mô hình

// Wrapper classes
        public class AViewModel
        {
            public A a { get; set; }
            public List<B> b { get; set; }
            public C c { get; set; }
        }   

Bộ điều khiển

        public ActionResult Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            if (!canUserAccessA(id.Value))
                return new HttpStatusCodeResult(HttpStatusCode.Forbidden);

            var aViewModel = new AViewModel();
            aViewModel.A = db.As.Find(id);

            if (aViewModel.Receipt == null)
            {
                return HttpNotFound();
            }

            aViewModel.b = db.Bs.Where(x => x.aID == id.Value).ToList();
            aViewModel.Vendor = db.Cs.Where(x => x.cID == aViewModel.a.cID).FirstOrDefault();

            return View(aViewModel);
        }

[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(AViewModel aViewModel)
        {
            if (!canUserAccessA(aViewModel.a.aID) || aViewModel.a.UserID != WebSecurity.GetUserId(User.Identity.Name))
                return new HttpStatusCodeResult(HttpStatusCode.Forbidden);

            if (ModelState.IsValid)
            {
                db.Entry(aViewModel.a).State = EntityState.Modified; //THIS IS WHERE THE ERROR IS BEING THROWN
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(aViewModel);
        }

Như hình trên dòng

db.Entry(aViewModel.a).State = EntityState.Modified;

ném ngoại lệ:

Không thể đính kèm một thực thể thuộc loại 'A' vì một thực thể khác cùng loại đã có cùng giá trị khóa chính. Điều này có thể xảy ra khi sử dụng phương pháp 'Đính kèm' hoặc đặt trạng thái của thực thể thành 'Không thay đổi' hoặc 'Đã sửa đổi' nếu bất kỳ thực thể nào trong biểu đồ có các giá trị khóa xung đột. Điều này có thể là do một số thực thể là mới và chưa nhận được các giá trị khóa do cơ sở dữ liệu tạo ra. Trong trường hợp này, hãy sử dụng phương pháp 'Thêm' hoặc trạng thái thực thể 'Đã thêm' để theo dõi biểu đồ và sau đó đặt trạng thái của các thực thể không phải là mới thành 'Không thay đổi' hoặc 'Đã sửa đổi' nếu thích hợp.

Có ai thấy bất cứ điều gì sai trong mã của tôi hoặc hiểu trong những trường hợp nào nó sẽ gây ra lỗi như vậy trong khi chỉnh sửa một mô hình?


Bạn đã thử đính kèm thực thể của mình trước khi đặt EntityState? Như một thực thể của bạn xuất phát từ một bài yêu cầu, nó không nên được theo dõi bởi bối cảnh hiện nay, tôi đoán rằng nó cho rằng bạn cố gắng thêm một mục với một ID hiện có
Reda Mattar

Tôi đã thử cái này và kết quả là giống hệt nhau :( Đối với một số bối cảnh lý do nghĩ Im tạo một mục mới, nhưng Im chỉ cần cập nhật một hiện ...
Chris Ciszak

Tôi kiểm tra trạng thái của 'a' trước khi lỗi được ném ra và trạng thái của đối tượng này là 'Tách rời' nhưng việc gọi db.As.Attach (aViewModel.a) lại ném ra chính xác cùng một thông báo? Có ý kiến ​​gì không?
Chris Ciszak

5
Tôi vừa thấy bản cập nhật của bạn, bạn đã thiết lập phạm vi tồn tại của ngữ cảnh như thế nào? Có phải theo yêu cầu không? Nếu dbtrường hợp giống nhau giữa hai hành động của bạn, thì nó có thể giải thích sự cố của bạn, vì mục của bạn được tải bằng phương thức GET (sau đó được theo dõi bởi ngữ cảnh) và nó có thể không nhận dạng được thực thể trong phương thức POST của bạn là thực thể được tìm nạp trước đó .
Réda Mattar

1
canUserAccessA()tải thực thể trực tiếp hay như một mối quan hệ của một đối tượng khác không?
CodeCaster

Câu trả lời:


155

Vấn đề đã được GIẢI QUYẾT!

Attachphương pháp này có thể giúp ai đó nhưng sẽ không giúp được gì trong trường hợp này vì tài liệu đã được theo dõi khi đang được tải trong chức năng bộ điều khiển Edit GET. Đính kèm sẽ gây ra cùng một lỗi.

Vấn đề tôi gặp phải ở đây là do hàm canUserAccessA()tải thực thể A trước khi cập nhật trạng thái của đối tượng a. Điều này đã làm hỏng thực thể được theo dõi và nó đang thay đổi trạng thái của một đối tượng thànhDetached .

Giải pháp là sửa đổi canUserAccessA()để đối tượng tôi đang tải không bị theo dõi. Hàm AsNoTracking()nên được gọi trong khi truy vấn ngữ cảnh.

// User -> Receipt validation
private bool canUserAccessA(int aID)
{
    int userID = WebSecurity.GetUserId(User.Identity.Name);
    int aFound = db.Model.AsNoTracking().Where(x => x.aID == aID && x.UserID==userID).Count();

    return (aFound > 0); //if aFound > 0, then return true, else return false.
}

Vì một số lý do, tôi không thể sử dụng .Find(aID)với AsNoTracking()nhưng nó không thực sự quan trọng vì tôi có thể đạt được điều tương tự bằng cách thay đổi truy vấn.

Hy vọng điều này sẽ giúp bất kỳ ai có vấn đề tương tự!


10
gọn gàng hơn một chút và hiệu quả hơn: if (db.As.AsNoTracking (). Any (x => x.aID == aID && x.UserID == userID))
Brent,

11
Lưu ý: bạn cần using System.Data.Entity;sử dụng AsNoTracking().
Maxime

Trong trường hợp của tôi, chỉ cập nhật các trường ngoại trừ id thực thể hoạt động tốt: var entity = context.Find (entity_id); entity.someProperty = newValue; context.Entry (entity) .Property (x => x.someProperty) .IsModified = true; context.SaveChanges ();
Anton Lyhin

3
Trợ giúp đông đảo. Tôi đã thêm .AsNoTracking () trước FirstOrDefault () của tôi và nó hoạt động.
coggicc

110

Một cách thú vị:

_dbContext.Set<T>().AddOrUpdate(entityToBeUpdatedWithId);

Hoặc nếu bạn vẫn không chung chung:

_dbContext.Set<UserEntity>().AddOrUpdate(entityToBeUpdatedWithId);

dường như giải quyết vấn đề của tôi một cách suôn sẻ.


1
Thật tuyệt vời, điều đó hoạt động hoàn hảo trong kịch bản của tôi, nơi tôi cần cập nhật các bản ghi từ nhiều đến nhiều với một bảng tham gia tùy chỉnh trong một ứng dụng bị ngắt kết nối. Ngay cả khi thực thể được lấy từ cơ sở dữ liệu, tôi vẫn nhận được lỗi tham chiếu, v.v. Tôi đang sử dụng "context.Entry (score) .State = System.Data.Entity.EntityState.Modified;" nhưng điều này cuối cùng đã hoạt động! Cảm ơn bạn!!
firecape

5
Những công việc này. Tất cả các đề xuất khác về việc đính kèm và sử dụng notracking đều không thành công vì tôi đã thực hiện noTracking. Cảm ơn vì giải pháp.
Khainestar

3
Điều này làm việc cho tôi khi cập nhật các thực thể mẹ và con trong cùng một đơn vị công việc . cảm ơn rất nhiều
Ian

55
Đối với bất kỳ ai đang tìm kiếm, AddOrUpdatelà một phương thức mở rộng trong System.Data.Entity.Migrationskhông gian tên.
Nick

1
@Artyomska Rất tiếc là tôi không biết.
guneysus

15

Có vẻ như thực thể bạn đang cố gắng sửa đổi không được theo dõi chính xác và do đó không được nhận dạng là đã chỉnh sửa mà được thêm vào.

Thay vì trực tiếp thiết lập trạng thái, hãy thử làm như sau:

//db.Entry(aViewModel.a).State = EntityState.Modified;
db.As.Attach(aViewModel.a); 
db.SaveChanges();

Ngoài ra, tôi muốn cảnh báo rằng mã của bạn có chứa lỗ hổng bảo mật tiềm ẩn. Nếu bạn đang sử dụng thực thể trực tiếp trong mô hình xem của mình, thì bạn có nguy cơ ai đó có thể sửa đổi nội dung của thực thể bằng cách thêm các trường được đặt tên chính xác trong biểu mẫu đã gửi. Ví dụ: nếu người dùng thêm hộp nhập có tên "A.FirstName" và thực thể chứa trường như vậy, thì giá trị sẽ được liên kết với mô hình xem và được lưu vào cơ sở dữ liệu ngay cả khi người dùng không được phép thay đổi giá trị đó trong hoạt động bình thường của ứng dụng. .

Cập nhật:

Để vượt qua lỗ hổng bảo mật đã đề cập trước đây, bạn không nên để lộ mô hình miền của mình dưới dạng mô hình xem của bạn mà thay vào đó hãy sử dụng mô hình xem riêng biệt. Sau đó, hành động của bạn sẽ nhận được mô hình xem mà bạn có thể ánh xạ lại mô hình miền bằng cách sử dụng một số công cụ ánh xạ như AutoMapper. Điều này sẽ giúp bạn an toàn trước việc người dùng sửa đổi dữ liệu nhạy cảm.

Đây là giải thích mở rộng:

http://www.stevefenton.co.uk/Content/Blog/Date/201303/Blog/Why-You-Never-Expose-Your-Domain-Model-As-Your-MVC-Model/


3
Xin chào Kaspars, cảm ơn bạn đã đóng góp ý kiến. Phương thức Đính kèm đưa ra các lỗi tương tự như đã đề cập trong câu hỏi của tôi. Vấn đề là hàm canUserAccessA () tải thực thể cũng như CodeCaster đã nhận thấy ở trên. Nhưng nói rằng tôi rất quan tâm đến đề xuất của bạn liên quan đến bảo mật. Bạn có thể đề nghị tôi nên làm gì để ngăn chặn hành vi đó không?
Chris Ciszak

Cập nhật câu trả lời của tôi với thông tin bổ sung về cách ngăn chặn lỗ hổng bảo mật.
Kaspars Ozols

13

Thử cái này:

var local = yourDbContext.Set<YourModel>()
                         .Local
                         .FirstOrDefault(f => f.Id == yourModel.Id);
if (local != null)
{
  yourDbContext.Entry(local).State = EntityState.Detached;
}
yourDbContext.Entry(applicationModel).State = EntityState.Modified;

11

đối với tôi, bản sao cục bộ là nguồn gốc của vấn đề. điều này đã giải quyết nó

var local = context.Set<Contact>().Local.FirstOrDefault(c => c.ContactId == contact.ContactId);
                if (local != null)
                {
                    context.Entry(local).State = EntityState.Detached;
                }

10

Trường hợp của tôi là tôi không có quyền truy cập trực tiếp vào ngữ cảnh EF từ ứng dụng MVC của mình.

Vì vậy, nếu bạn đang sử dụng một số loại kho lưu trữ cho sự tồn tại của thực thể thì có thể chỉ cần tách thực thể được tải rõ ràng ra và sau đó đặt EntityState được liên kết thành Đã sửa đổi.

Mã mẫu (trừu tượng):

MVC

public ActionResult(A a)
{
  A aa = repo.Find(...);
  // some logic
  repo.Detach(aa);
  repo.Update(a);
}

Kho

void Update(A a)
{
   context.Entry(a).EntityState = EntityState.Modified;
   context.SaveChanges();
}

void Detach(A a)
{
   context.Entry(a).EntityState = EntityState.Detached;
}

Điều này đã làm việc cho tôi, mặc dù tôi không bận tâm đến việc sử dụng kho lưu trữ để tham chiếu các trạng thái thực thể ngữ cảnh.
Eckert

3

Tôi nghĩ tôi sẽ chia sẻ kinh nghiệm của mình về vấn đề này, mặc dù tôi cảm thấy hơi ngớ ngẩn vì không nhận ra sớm hơn.

Tôi đang sử dụng mẫu kho lưu trữ với các bản sao kho được đưa vào bộ điều khiển của mình. Các kho lưu trữ cụ thể khởi tạo ModelContext (DbContext) của tôi kéo dài thời gian tồn tại của kho lưu trữ, đó làIDisposable trình điều khiển và xử lý.

Vấn đề đối với tôi là tôi có một phiên bản tem và hàng đã sửa đổi trên các thực thể của mình, vì vậy tôi đã lấy chúng trước tiên để so sánh với các tiêu đề gửi đến. Tất nhiên, điều này đã tải và theo dõi thực thể mà sau đó đã được cập nhật.

Cách khắc phục chỉ đơn giản là thay đổi kho lưu trữ từ việc tạo mới ngữ cảnh một lần trong phương thức khởi tạo thành có các phương thức sau:

    private DbContext GetDbContext()
    {
        return this.GetDbContext(false);
    }


    protected virtual DbContext GetDbContext(bool canUseCachedContext)
    {
        if (_dbContext != null)
        {
            if (canUseCachedContext)
            {
                return _dbContext;
            }
            else
            {
                _dbContext.Dispose();
            }
        }

        _dbContext = new ModelContext();

        return _dbContext;
    }

    #region IDisposable Members

    public void Dispose()
    {
        this.Dispose(true);
    }

    protected virtual void Dispose(bool isDisposing)
    {
        if (!_isDisposed)
        {
            if (isDisposing)
            {
                // Clear down managed resources.

                if (_dbContext != null)
                    _dbContext.Dispose();
            }

            _isDisposed = true;
        }
    }

    #endregion

Điều này cho phép các phương thức kho lưu trữ tạo lại phiên bản ngữ cảnh mới của chúng sau mỗi lần sử dụng bằng cách gọi GetDbContext, hoặc sử dụng phiên bản trước đó nếu họ muốn bằng cách chỉ định true.


2

Tôi đã thêm câu trả lời này chỉ vì vấn đề được giải thích dựa trên mẫu dữ liệu phức tạp hơn và tôi thấy khó hiểu ở đây.

Tôi đã tạo một ứng dụng khá đơn giản. Lỗi này xảy ra bên trong hành động Chỉnh sửa ĐĂNG. Hành động đã chấp nhận ViewModel làm tham số đầu vào. Lý do sử dụng ViewModel là để thực hiện một số tính toán trước khi bản ghi được lưu.

Sau khi hành động được thông qua xác thực, chẳng hạn như if(ModelState.IsValid) hành động sai trái của tôi là chiếu các giá trị từ ViewModel vào một phiên bản hoàn toàn mới của Thực thể. Tôi nghĩ rằng tôi sẽ phải tạo một phiên bản mới để lưu trữ dữ liệu cập nhật và sau đó lưu phiên bản đó.

Điều tôi nhận ra sau đó là tôi phải đọc bản ghi từ cơ sở dữ liệu:

Student student = db.Students.Find(s => s.StudentID == ViewModel.StudentID);

và cập nhật đối tượng này. Mọi thứ hoạt động ngay bây giờ.


2

Tôi đã gặp sự cố này với var cục bộ và tôi chỉ tách nó ra như thế này:

if (ModelState.IsValid)
{
    var old = db.Channel.Find(channel.Id);
    if (Request.Files.Count > 0)
    {
        HttpPostedFileBase objFiles = Request.Files[0];
        using (var binaryReader = new BinaryReader(objFiles.InputStream))
        {
            channel.GateImage = binaryReader.ReadBytes(objFiles.ContentLength);
        }

    }
    else
        channel.GateImage = old.GateImage;
    var cat = db.Category.Find(CatID);
    if (cat != null)
        channel.Category = cat;
    db.Entry(old).State = EntityState.Detached; // just added this line
    db.Entry(channel).State = EntityState.Modified;
    await db.SaveChangesAsync();
    return RedirectToAction("Index");
}
return View(channel);

Nguyên nhân sự cố của các đối tượng được tải với cùng một Khóa, vì vậy trước tiên chúng tôi sẽ tách đối tượng đó ra và cập nhật để tránh xung đột giữa hai đối tượng có cùng Khóa


@Artjom B Vấn đề gây ra các đối tượng được nạp với cùng Key, vì vậy đầu tiên chúng tôi sẽ tách đối tượng và thực hiện việc cập nhật đến xung đột tránh giữa hai đối tượng với Key cùng
lvl4fi4

2

Tôi đã gặp sự cố tương tự, sau khi thăm dò trong 2-3 ngày, thấy ".AsNoTracking" nên bị xóa vì EF không theo dõi các thay đổi và giả định không có thay đổi nào trừ khi có đối tượng được đính kèm. Ngoài ra nếu chúng ta không sử dụng .AsNoTracking, EF sẽ tự động biết đối tượng nào để lưu / cập nhật nên không cần sử dụng Đính kèm / Đã thêm.


2

Sử dụng AsNoTracking()nơi bạn nhận được truy vấn của mình.

  var result = dbcontext.YourModel.AsNoTracking().Where(x => x.aID == aID && x.UserID==userID).Count();

2

Tôi gặp lỗi này ở đâu

  • hai phương thức A & B trong một bộ điều khiển duy nhất đều sử dụng cùng một phiên bản của ApplicationDbContext
  • phương pháp A được gọi là phương pháp B
    private ApplicationDbContext db;
    // api methods
    public JsonResult methodA(string id){
        Resource resource = db.Resources.Find(id);
        db.Entry(resource).State = EntityState.Modified;
        db.SaveChanges();
        return methodB()
    }

    public JsonResult methodB(string id){
        Resource resource = db.Resources.Find(id);
        db.Entry(resource).State = EntityState.Modified;
        db.SaveChanges();
        return new JsonResult();
    }

Tôi đã thay đổi phương pháp B để có một câu lệnh using và chỉ dựa vào db2 cục bộ . Sau:

    private ApplicationDbContext db;    
    // api methods    
    public JsonResult methodA(string id){
        Resource resource = db.Resources.Find(id);
        db.Entry(resource).State = EntityState.Modified;
        db.SaveChanges();
        return methodB()
    }

    public JsonResult methodB(string id){
        using (var db2 = new ApplicationDbContext())
        {
            Resource resource = db2.Resources.Find(id);
            db2.Entry(resource).State = EntityState.Modified;
            db2.SaveChanges();
        }
        return new JsonResult();
    }

1

Tương tự như những gì Luke Puplett đang nói, vấn đề có thể do bạn không sắp xếp hoặc tạo bối cảnh đúng cách.

Trong trường hợp của tôi, tôi có một lớp chấp nhận ngữ cảnh được gọi là ContextService:

public class ContextService : IDisposable
{
    private Context _context;

    public void Dispose()
    {
        _context.Dispose();
    }
    public ContextService(Context context)
    {
        _context = context;
    }
//... do stuff with the context

Dịch vụ ngữ cảnh của tôi có một chức năng cập nhật một thực thể bằng cách sử dụng một đối tượng thực thể được khởi tạo:

        public void UpdateEntity(MyEntity myEntity, ICollection<int> ids)
        {
            var item = _context.Entry(myEntity);
            item.State = EntityState.Modified;
            item.Collection(x => x.RelatedEntities).Load();
            myEntity.RelatedEntities.Clear();
            foreach (var id in ids)
            {
                myEntity.RelatedEntities.Add(_context.RelatedEntities.Find(id));
            }
            _context.SaveChanges();
        }

Tất cả điều này đều ổn, bộ điều khiển của tôi nơi tôi khởi tạo dịch vụ là vấn đề. Bộ điều khiển của tôi ban đầu trông như thế này:

    private static NotificationService _service = 
        new NotificationService(new NotificationContext());
    public void Dispose()
    {
    }

Tôi đã thay đổi nó thành này và lỗi đã biến mất:

    private static NotificationService _service;
    public TemplateController()
    {
        _service = new NotificationService(new NotificationContext());
    }
    public void Dispose()
    {
        _service.Dispose();
    }

1

Vấn đề này cũng có thể được nhìn thấy trong suốt ViewModelđể EntityModellập bản đồ (bằng cách sử dụng AutoMapper, vv) và cố gắng để bao gồm context.Entry().Statecontext.SaveChanges()một ví dụ sử dụng khối như hình dưới đây sẽ giải quyết vấn đề. Xin lưu ý rằng context.SaveChanges()phương pháp được sử dụng hai lần thay vì chỉ sử dụng sau if-blockvì nó cũng phải được sử dụng trong khối.

public void Save(YourEntity entity)
{
    if (entity.Id == 0)
    {
        context.YourEntity.Add(entity);
        context.SaveChanges();
    }
    else
    {
        using (var context = new YourDbContext())
        {
            context.Entry(entity).State = EntityState.Modified;
            context.SaveChanges(); //Must be in using block
        }
    }            
}

Hi vọng điêu nay co ich...


1

Đây là những gì tôi đã làm trong trường hợp tương tự.

Tình huống đó có nghĩa là cùng một thực thể đã tồn tại trong ngữ cảnh.

Trước tiên, hãy kiểm tra từ ChangeTracker xem thực thể có trong ngữ cảnh không

var trackedEntries=GetContext().ChangeTracker.Entries<YourEntityType>().ToList();

var isAlreadyTracked =
                    trackedEntries.Any(trackedItem => trackedItem.Entity.Id ==myEntityToSave.Id);

Nếu nó tồn tại

  if (isAlreadyTracked)
            {
                myEntityToSave= trackedEntries.First(trackedItem => trackedItem.Entity.Id == myEntityToSave.Id).Entity;
            } 

else
{
//Attach or Modify depending on your needs
}

1

Tôi phải khắc phục sự cố bằng cách cập nhật trạng thái. khi bạn kích hoạt tìm kiếm hoặc bất kỳ thao tác truy vấn nào khác trên cùng một bản ghi, sate đã được cập nhật với sửa đổi, vì vậy chúng tôi cần đặt trạng thái thành Tách rời khi đó bạn có thể kích hoạt thay đổi cập nhật của mình

     ActivityEntity activity = new ActivityEntity();
      activity.name="vv";
    activity.ID = 22 ; //sample id
   var savedActivity = context.Activities.Find(22);

            if (savedActivity!=null)
            {
                context.Entry(savedActivity).State = EntityState.Detached;
                context.SaveChanges();

                activity.age= savedActivity.age;
                activity.marks= savedActivity.marks; 

                context.Entry(activity).State = EntityState.Modified;
                context.SaveChanges();
                return activity.ID;
            }

1

Tôi giải quyết vấn đề này bằng một khối "using"

using (SqlConnection conn = new SqlConnection(connectionString))

    {

       // stuff to do with data base
    }

    // or if you are using entity framework 
    using (DataBaseEntity data = new DataBaseEntity)
{

    }

Đây là nơi tôi lấy ý tưởng https://social.msdn.microsoft.com/Forums/sqlserver/es-ES/b4b350ba-b0d5-464d-8656-8c117d55b2af/problema-al-modificar-en-entity-framework?forum = vcses bằng tiếng Tây Ban Nha (tìm câu trả lời thứ hai)


chỉ cần cẩn thận và chỉ sử dụng 1 thể hiện của cơ sở dữ liệu conexion, đặc biệt nếu bạn đang sử dụng khuôn khổ thực thể nếu bạn không làm điều đó bạn sẽ nhận được các lỗi Entity Framework Một đối tượng thực thể không thể được tham chiếu bởi nhiều trường hợp của IEntityChangeTracker
Suzume

1

bạn có thể sử dụng phương pháp thêm vào như;

_dbContext.Entry(modelclassname).State = EntityState.Added;

nhưng trong nhiều trường hợp nếu bạn muốn sử dụng nhiều hơn một mô hình tại thời điểm đó, điều này sẽ không hoạt động vì thực thể đã được gắn với một thực thể khác. Vì vậy, tại thời điểm đó, bạn có thể sử dụng phương thức ADDOrUpdate Entity Migration, phương thức này chỉ đơn giản là di chuyển đối tượng từ đối tượng này sang đối tượng khác và kết quả là bạn sẽ không gặp bất kỳ lỗi nào.

_dbContext.Set<modelclassname>().AddOrUpdate(yourmodel);

0

Xóa tất cả trạng thái

dbContextGlobalERP.ChangeTracker.Entries (). Where (e => e.Entity! = null) .ToList (). ForEach (e => e.State = EntityState.Detached);

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.