2012-10-22 37 views
28

Chúng tôi sử dụng Khuôn khổ thực thể 5, nhưng có yêu cầu C ALNG sử dụng kết nối cơ sở dữ liệu bình thường từ ứng dụng cho một số SQL tùy chỉnh mà chúng tôi cần thực hiện.Nhận chuỗi kết nối khung thực thể

Vì vậy, tôi đang tạo một lớp DatabaseAccess xử lý kết nối này. Có cách nào tôi có thể cư trú chuỗi kết nối, bằng cách kiểm tra chuỗi kết nối Entity Framework?

Vì vậy:

SqlConnection cnn; 
connetionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password" 

Tôi có thể xây dựng mà từ kiểm tra Entity Framework?

+0

Bạn có sử dụng Mã đầu tiên hoặc tệp edmx không? Bạn đang sử dụng ObjectContext của DbContext? –

Trả lời

8

Bạn có nghĩa là, bạn có thể sử dụng SqlConnection với EF DbContext của bạn không?

Lớp DbContext có số constructor nơi bạn có thể chuyển vào SqlConnection, sau đó cho EF biết có sở hữu nó hay không.

var YourContext = new YourContext(SqlConnection, true); 
+5

Giả định đó là DbContext, không phải là mặc định cho hầu hết mọi người khi sử dụng VS2010 hoặc 2008. ObjectContext không có hàm tạo nào như vậy. –

46

Bạn có thể lấy ConnectionString sử dụng bởi EF bằng cách sử dụng như sau:

MyDbContext.Database.Connection.ConnectionString 

Hoặc như đánh dấu cho biết bạn có thể initalise bối cảnh với một SqlConnection

+0

Điều này sẽ hiển thị chuỗi kết nối EF, khi sử dụng tệp edmx không thể sử dụng được bằng SqlConnection chuẩn. –

+0

Điều đó cũng không đúng. Bạn có thể sử dụng DbContext với một tệp edmx, và bạn sẽ vẫn có một chuỗi EntityConnection thay vì một Database ConnectionString khi sử dụng phương thức này. –

+2

Bạn dường như không hiểu điểm của tôi. Nếu bạn đang sử dụng DbContext và một tệp edmx, thì thuộc tính ConnectionString mà bạn đề cập sẽ * KHÔNG * chứa một chuỗi kết nối tương thích SqlConnection. Nó sẽ có một chuỗi EntityConnection, bao gồm chuỗi siêu dữ liệu và những gì không. Vì vậy, không, phương pháp của bạn, nếu sử dụng DbContext và một tệp edmx sẽ không cho phép ai đó lấy chuỗi kết nối và sử dụng nó với một SqlConnection. –

19

Có bạn có thể.

Xem here cho 3 tùy chọn.

1 - sử dụng chuỗi kết nối riêng biệt cho mỗi

2 - trích xuất nó từ đối tượng thực thể của bạn (đây là những gì tôi nghĩ rằng bạn muốn)

3 - sử dụng đối tượng thực thể để thực thi SQL tùy chỉnh của bạn

Dưới đây là cách thực hiện nr 2:

using System.Data.EntityClient; 
using System.Data.SqlClient; 
... 
private string GetADOConnectionString() 
{ 
    SalesSyncEntities ctx = new SalesSyncEntities(); //create your entity object here 
    EntityConnection ec = (EntityConnection)ctx.Connection; 
    SqlConnection sc = (SqlConnection)ec.StoreConnection; //get the SQLConnection that your entity object would use 
    string adoConnStr = sc.ConnectionString; 
    return adoConnStr; 
} 
+2

Bạn không thể sử dụng chỉ 'ctx.Connection.ConnectionString'? – cost

+2

Điều đó có thể có tất cả các công cụ res: // etc trong mặc dù .. – cost

+0

@Wimpie Ratte, Điều này là hoàn hảo. Nó cung cấp chuỗi kết nối chính xác. PS: EntityConnection nằm trong không gian tên System.Data.EntityClient. –

2

đây là một cách chung chung của nhận được chuỗi kết nối:

public string GetConnString<T>(T ent) 
      where T : ObjectContext 
     { 
      EntityConnection ec = (EntityConnection)ent.Connection; 
      SqlConnection sc = (SqlConnection)ec.StoreConnection; 
      return sc.ConnectionString; 
     } 

Sau đó, để sử dụng nó sẽ là:

MyEntities ent = new MyEntities(); 
String ConnString = GetConnString(ent); 
5

ngay cả trong EF3 bạn có thể sử dụng EntityConnectionStringBuilder.

EntityConnectionStringBuilder conn = 
    new EntityConnectionStringBuilder(DBEntities.dbConnection); 
SqlConnection s = new SqlConnection(conn.ProviderConnectionString); 
10

Sau đây là cách để có được những chuỗi kết nối trong EF 5, EF 6 và EF Core 1/EF 7.

//Entity Framework 5 
myContext.Database.Connection.ConnectionString 
//Entity Framework 6 
myContext.Database.Connection.ConnectionString 
//Entity Framework Core 1 
myContext.Database.GetDbConnection().ConnectionString 

Để biết thêm chi tiết xem - http://nodogmablog.bryanhogan.net/2016/04/entity-framework-checking-the-connection-string-of-your-context/

3

Tôi có vấn đề này quá , để giải quyết vấn đề bạn có thể làm điều này:

 SqlConnection con = context.Database.Connection as SqlConnection; 
     SqlCommand command = new SqlCommand(sql, con); 
     con.Open(); 

     SqlDataReader reader = command.ExecuteReader(); 
     while (reader.HasRows) 
     { 
      while (reader.Read()) 
      { 
       //read your fields 
      } 

      reader.NextResult(); 
     } 

     con.Close(); 
+0

Bản chất là ở dòng đầu tiên - giống như nó! –

0

Hy vọng nó giúp ..

private readonly ApplicationDbContext _applicationDbContext; 
    string connectionString = string.Empty; 

    public CommonService(ApplicationDbContext applicationDbContext) 
    { 
     _applicationDbContext = applicationDbContext; 
     connectionString = _applicationDbContext.Database.GetDbConnection().ConnectionString; 
    } 
+0

Xin hãy xem các câu trả lời khác, đã có các giải pháp làm việc đã giải quyết vấn đề của OP. :-) –

Các vấn đề liên quan