Chỉ cần tìm thấy các giải pháp sau khi vật lộn với điều này tất cả các buổi chiều. Dường như hàm tạo hoặc DbContext sẽ sử dụng chuỗi kết nối hoặc tên chuỗi kết nối, không giống nhau, nếu bạn chuyển một chuỗi kết nối, nó sẽ mặc định là SqlClient, là thứ duy nhất được đóng gói theo mặc định trong .NET
, nếu bạn, thay vì sử dụng toàn bộ chuỗi kết nối, chỉ cần truyền tên chuỗi kết nối sau đó nó sẽ phân tích nội bộ cũng là tham số "providerName" có tên assembly cho nhà cung cấp DB Oracle.DataAccess.Client chẳng hạn.
Vì vậy, thay vì đi qua các chuỗi kết nối để các nhà xây dựng DbContext chỉ cần vượt qua tên chuỗi kết nối, như thế này:
.config file:
<connectionStrings>
<add name="SQLServer" connectionString="Server=localhost; Database=MyDb; User ID=MyUser;Password=MyPwd;Pooling=false" providerName="System.Data.SqlClient" />
<add name="Oracle" connectionString="Data Source=localhost:1521/XE;Persist Security Info=True;User ID=MyUser;Password=MyPwd;" providerName="Oracle.ManagedDataAccess.Client"/>
</connectionStrings>
<appSettings>
<add key="DefaultConnection" value="Oracle" />
</appSettings>
Và trong DbContext của bạn:
public MyDbContext()
: base("DefaultConnection")
{
}
Bằng cách đó bạn chỉ cần thiết lập khóa cấu hình với n ame của chuỗi kết nối bạn muốn nối ngữ cảnh và sử dụng nó trong hàm tạo. Nếu bạn làm theo cách này, EF sẽ tự động phân tích cú pháp toàn bộ thẻ chuỗi kết nối và không chỉ giá trị thuộc tính connectionString, do đó, tải đúng nhà cung cấp.
Lưu ý rằng tôi đang sử dụng Oracle.ManagedDataAccess.Client mới hơn và chỉ có trong ODAC/ODP.NET v12 trở lên. Nếu bạn sử dụng ODAC 11, bạn nên sử dụng Oracle.DataAccess.Client trong providerName để thay thế.
Nguồn
2013-09-10 03:50:05
cố gắng thêm "provider = System.Data.OracleClient" vào kết nối của bạnString –
@MaxZerbini Tôi đã thử điều đó, không hoạt động. –