2017-03-02 58 views
1

我正在尝试在不使用EF Core的情况下创建ASP.NET Core Web API。相反,我想使用System.Data.SQLClient连接到SQL服务器,并使用普通的旧SQL进行查询。这就是说,我在确定如何建立连接时遇到了一些问题。我在网上发现了很多教程,介绍如何用EF做到这一点。但是,如果没有它,我感到有些困惑。如何在不使用EF的情况下连接到ASP.NET Core Web API中的数据库?

回答

4

你这样做完全一样的方式,你会在任何.NET应用程序:

using (var conn = new System.Data.SqlClient.SqlConnection(connectionString)) { 
    conn.Open(); 
    using (var cmd = conn.CreateCommand()) { 
     cmd.CommandText = "SELECT 'hello world'"; 
     using (var reader = cmd.ExecuteReader()) { 
      while (reader.Read()) { 
       ... 
      } 
     } 
    } 
} 

你会发现,asp.net核心的某些部分需要EF,像身份声称的东西,所以你会需要处理您自己的身份验证,并且无法使用其安全属性等。我已经走了几条asp.net核心项目的这条路线,没有遗憾

+0

感谢您的回应,蒂姆。我更关心的是如何将其与Web API框架集成。我注意到Startup.cs中有一个Configure方法,但它似乎很大程度上依赖于依赖注入,而这正是我挣扎的地方。我对这种混乱表示歉意,我应该更清楚地知道这个问题有两个部分。 – toolshed

+0

您是否问如何构建和添加一个服务到DI,这将是SqlConnection对象的工厂,以尝试匹配asp.net核心的DI模式?什么特别不适合你? – Tim

+0

我的问题是我有一个现有的数据库,我只是想查询,并将结果推送到REST API。我从教程中了解到,我期望在'Startup.cs'的'ConfigureServices'方法中启动数据库连接,然后在控制器类中执行我的命令。我误解了这个范例是如何设计的? – toolshed

0

您必须使用SqlConnection和SqlCommand类。从documentation

private static void CreateCommand(string queryString, string connectionString) 
{ 
    using (SqlConnection connection = new SqlConnection(
      connectionString)) 
    { 
     SqlCommand command = new SqlCommand(queryString, connection); 
     command.Connection.Open(); 
     command.ExecuteNonQuery(); 
    } 
} 

CreateCommand("insert into...", "[your connection string]"); 

的方法,另外,Dapper是用于访问数据一个不错的选择,是一个扩展的IDbConnection,所以你不必担心对象创建一个对象映射器。从短小的文稿

public class Dog 
{ 
    public int? Age { get; set; } 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public float? Weight { get; set; } 

    public int IgnoredProperty { get { return 1; } } 
}    

var guid = Guid.NewGuid(); 
var dog = connection.Query<Dog>("select Age = @Age, Id = @Id", new { Age = (int?)null, Id = guid }); 
相关问题