- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个命令服务类,它利用工作单元模式,使用各种方法通过 Entity Framework 更新数据库(在本例中为 SQL Azure)。
命令服务通过对 dbcontext 实例的引用进行实例化,其生命周期由我选择的 DI 框架管理。
一些命令服务类的方法将对数据库的多次更新包装在一个事务中,例如:
public void UpdateStuff(someEntity)
{
using(var tx = _db.Database.BeginTransaction())
{
//Some updates to db
_db.SaveChanges();
//Some other updates to db
_db.SaveChanges();
tx.Commit();
}
}
现在,其中一些方法从它们的事务中调用命令类的其他方法,例如:
public void UpdateWithSomeCascadingStuff(someOtherEntity)
{
using(var tx = _db.Database.BeginTransaction())
{
//Some updates to db
_db.SaveChanges();
//Some other cascading logic and updates to db
var relatedEntityToUpdate = _query.GetSomeEntityToUpdate(someOtherEntity);
UpdateStuff(relatedEntityToUpdate);
_db.SaveChanges();
tx.Commit();
}
}
显然,通过这样做,我为同一个 DbContext 实例嵌套了 EF 事务。
这是否受支持,会造成任何麻烦吗?我可以采取任何替代方法吗?
更新:我正在使用 EF6 Code First
câu trả lời hay nhất
EntityFramework 的 DBContexts 本身实现了 UnitOfWork 和 Repository 模式。
EF6 中的上下文还会自动将所有提交包装在一个事务中(如果它还不是一个事务的一部分)。
所以,不,你不应该在多个工作单元之间共享上下文。他们应该每个人都有自己的。
gia hạn
如果您尝试在同一个 DbContext 上启动重复事务,您会得到:
An unhandled exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll
Additional information: The connection is already in a transaction and cannot participate in another transaction. EntityClient does not support parallel transactions.
所以不,你不能做你要求的事。
关于c# - EF6 嵌套事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37212896/
Tôi đang sử dụng PostgREST để hiển thị các thực thể cơ sở dữ liệu cho các ứng dụng Springboot sử dụng các thực thể này. Có hai thực thể trong cơ sở dữ liệu của tôi, Người và Thành phố. Tôi muốn lưu thực thể Person và Cit cùng một lúc
1. Định nghĩa giao dịch Các giao dịch Redis cung cấp một cơ chế "đóng gói nhiều lệnh và sau đó thực thi chúng cùng một lúc và theo trình tự". Chức năng chính của giao dịch redis là kết nối nhiều lệnh nối tiếp để ngăn các lệnh khác nhảy vào hàng đợi. Tuy nhiên, công việc không phải là truyền thống
Giao dịch giao dịch SQLite là một đơn vị công việc được thực hiện trên cơ sở dữ liệu. Giao dịch là một đơn vị hoặc chuỗi công việc được hoàn thành theo thứ tự hợp lý. Nó có thể được người dùng hoặc người dùng hoàn thành theo cách thủ công.
Giao dịch là hoạt động nhóm tuần tự. Chúng chạy như một đơn vị duy nhất và không kết thúc cho đến khi tất cả các hoạt động trong nhóm được thực hiện thành công. Một lỗi duy nhất trong nhóm sẽ khiến toàn bộ giao dịch bị lỗi và không ảnh hưởng đến cơ sở dữ liệu. Giao dịch tuân thủ ACID (Tính nguyên tử, Tính nhất quán, Cách ly và Độ bền)
Tôi muốn sử dụng SqlKata cho một dự án. Tuy nhiên, một phần tiêu chí của dự án là các truy vấn có thể được thực hiện dưới dạng giao dịch. Có cách nào để thực hiện một truy vấn hoặc nhiều truy vấn bằng giao dịch MSSQL không? Cảm ơn bạn rất nhiều. Câu trả lời hay nhất sử dụng SQLKata
Tôi chỉ đang thử nghiệm các giao dịch PetaPoco theo kiểu đa luồng... Tôi có một trường hợp thử nghiệm đơn giản: -- Đối tượng giá trị đơn giản được gọi là MediaDevice -- Chèn bản ghi, cập nhật 1000 lần void TransactionT
Tôi đang cố chèn một số dữ liệu vào SQL từ Excel VBA. Các lệnh SQL được xây dựng trong quy trình của tập lệnh VBA, bao gồm cả việc sử dụng một số biến SQL. Tôi đang cố gắng hiểu cách các giao dịch hoạt động trong VBA và liệu chúng có thể được xử lý hay không
Đây là tình huống: Một hệ thống máy khách/máy chủ sản xuất lớn trong đó một trong các bảng cơ sở dữ liệu trung tâm có một cột có giá trị mặc định là NULL, nhưng bây giờ giá trị mặc định là 0. Nhưng tất nhiên tất cả các hàng được tạo trước sự thay đổi đó vẫn có giá trị null, điều này tạo ra nhiều
Giao dịch cơ sở dữ liệu là một khái niệm quen thuộc. thử { ... .. updateDB() .. ... commit() } bắt lỗi { rollback() }
Tôi đang cố gắng hiểu cách sử dụng các giao dịch Spring bằng cách sử dụng hỗ trợ truyền bá. Tài liệu java đề cập rằng nếu một phương thức có @Transactional(propagation = Propagation.SUPPORTS) hỗ trợ điều này
Tôi cần lấy ID giao dịch của chế độ ngủ đông. ID này phải là duy nhất cho mỗi giao dịch. Tôi đã thử sử dụng session.getTransaction().hashCode() nhưng tôi tin rằng giá trị này không phải là duy nhất. tối ưu
Tôi nhận được thông báo sau từ firebase: runTransactionBlock: Đã phát hiện mức sử dụng trong khi tính năng lưu giữ được bật. Lưu ý rằng các giao dịch không được duy trì khi khởi động lại ứng dụng. Vậy chính xác điều gì sẽ xảy ra sau khi ứng dụng khởi động lại? Vì cơ sở dữ liệu chính
Tôi cần thực hiện một chuỗi các truy vấn chọn, cập nhật, chèn trong jdbc. Đây là mã của tôi: public String editRequest(){ Connection = DatabaseUtil.getServi
Java có cung cấp cách thức "tổng hợp" các giao dịch một cách thông minh không? Nếu tôi có nhiều kho lưu trữ dữ liệu không đồng nhất mà tôi muốn đồng bộ hóa (ví dụ: Postgres cho dữ liệu, Neo4j cho biểu đồ và Lucene cho chỉ mục), thì có mô hình nào chỉ cho phép
Tôi có một số câu hỏi về chủ đề trong tiêu đề. Đầu tiên, giả sử chúng ta đang sử dụng JDBC và có 2 giao dịch T1 và T2. Trong T1, chúng tôi thực thi câu lệnh chọn trên một hàng cụ thể. Sau đó, chúng tôi thực hiện cập nhật trên hàng đó. Trong giao dịch T2, chúng ta
Tôi có CGI Python xử lý các giao dịch thanh toán. Khi người dùng gửi biểu mẫu, CGI sẽ được gọi. Sau khi gửi, phải mất một thời gian để CGI thực hiện giao dịch thẻ tín dụng. Trong thời gian này, người dùng có thể nhấn nút ESC hoặc nút làm mới. Làm điều này không "giết chết" CGI,
Tôi có một mã trông giống như def many_objects_ Saving(list_of_objects): cho some_object trong list_of_objects:
Tôi có một bảng có 100.000 bản ghi. Tôi đang nghĩ đến việc sử dụng các giao dịch để cập nhật dữ liệu. Sẽ có một truy vấn cập nhật một cột về 0 và sẽ có khoảng 5000 lượt cập nhật, mỗi lượt cập nhật sẽ cập nhật một bản ghi. Những giao dịch lớn này có tác động gì đến bộ nhớ? Số lựa chọn thời gian chạy giao dịch
Có cách nào để thực hiện các giao dịch SQL bằng một lệnh không? Ví dụ: mysql_query(" BẮT ĐẦU GIAO DỊCH; CHÈN VÀO bảng1 .... vv; tab CHÈN VÀO
Thực sự hy vọng điều này có ích! Tôi sử dụng chức năng sau để gửi tin nhắn trong ứng dụng PHP/MySql: public function sendMail($sender_id, $recipient_id, $subject
Tôi là một lập trình viên xuất sắc, rất giỏi!