2016-10-16 1 views
0

Я создал функцию Azure, которая соединяется с Azure SQL DB и выполняет прямые команды SQL. Теперь я хотел бы использовать LINQ. Я использовал Visual Studios для создания файла определения, но я не уверен, как ссылаться на файл определения после загрузки в функцию. Приведенный ниже код получает ошибку:Как настроить файл определения для использования LINQ в Azure Function?

error CS1061: 'SqlConnection' does not contain a definition for 'Customers' and no extension method 'Customers' accepting a first argument of type 'SqlConnection' could be found (are you missing a using directive or an assembly reference?)

Вот код, который я есть для Azure функции:

using System.Net; 
using Dapper; 
using System.Data.SqlClient; 
using System.Configuration; 

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log) 
{ 
    log.Info($"C# HTTP trigger function processed a request. RequestUri={req.RequestUri}"); 

    var cnnString = ConfigurationManager.ConnectionStrings["SqlConnection"].ConnectionString; 
    var connection = new SqlConnection(cnnString); 

    var result = from r in connection.Customers select r; 

    foreach (var r in result) 
    { 
     log.Info(r.squid); 
    } 

    log.Info("Log added to database successfully!"); 

    return req.CreateResponse(HttpStatusCode.OK); 
} 
+0

Я мог бы быть неправильно, но всякий раз, когда используется объект 'SqlConnection', ему необходимо сопоставить w /' SqlCommand' ('SqlCommand' запускает запрос и использует метод ExecuteReader для выбранных операторов). Чтобы использовать 'LINQ', таблицы должны анализироваться на объекты (например, в Entity Framework). Следующая ссылка - «LINQ to SQL», а не «Entity Framework» (которую я рекомендую) - https://weblogs.asp.net/scottgu/linq-to-sql-part-3-querying-our-database - Пожалуйста, поправьте меня, если я ошибаюсь –

+0

Спасибо за комментарий Роб. Если необходим DataContext, я все еще не уверен, как это сделать в Azure Function. Веб-сайт, на который вы ссылаетесь, говорит о том же методе, который я пытаюсь использовать выше, но не в функции Azure. –

+0

Можете взглянуть на этот пост. Обратите внимание, что вы не обертываете свой объект 'SqlConnection' в' using' statement', и вы не открываете соединение. (это не относится к вашей ошибке, хотя -http: //www.codeproject.com/Articles/1110663/Azure-Functions-Tutorial-SQL-Database –

ответ

0

Вы можете загрузить в другом классе с использованием #load. Вы можете создавать новые файлы, используя view files ссылку в нижней части окна кода

Run.csx Файл

#r "System.Data.Linq" 
#load "TodoItem.csx" 

using System.Net; 
using System.Data.Linq; 
using System.Data.Linq.Mapping; 
using System.Configuration; 

public static void Run(string input, TraceWriter log) 
{   
    var cnnString = ConfigurationManager.ConnectionStrings["MS_TableConnectionString"].ConnectionString; 
    DataContext db = new DataContext(cnnString);  
    Table<todoItem> todoItems = db.GetTable<todoItem>();   
    IQueryable<todoItem> itemQuery = from todoItem in todoItems select todoItem; 

    foreach (todoItem item in itemQuery) 
    { 
     log.Info($"ID={item.id}, Text={item.text}"); 
    } 

    return; 
} 

TodoItem.csx Файл

#r "System.Data.Linq" 
#r "System.Data" 

using System.Data.Linq.Mapping; 
using System.Data; 

[Table(Name = "TodoItem")] 
public class todoItem 
{ 
    private string _id; 
    [Column(IsPrimaryKey=true, Storage="_id")] 
    public string id 
    { 
     get 
     { 
      return this._id; 
     } 
     set 
     { 
      this._id = value; 
     } 

    } 

    private string _text; 
    [Column(Storage="_text")] 
    public string text 
    { 
     get 
     { 
      return this._text; 
     } 
     set 
     { 
      this._text=value; 
     } 
    } 
} 
+0

Спасибо Naren за ответ и подробный пример. –