C# 如何使用Azure函数或逻辑应用程序将数据保存到sql数据库中?

C# 如何使用Azure函数或逻辑应用程序将数据保存到sql数据库中?,c#,azure,azure-sql-database,azure-functions,azure-logic-apps,C#,Azure,Azure Sql Database,Azure Functions,Azure Logic Apps,我有一个ASP.NET MVC应用程序,目前正在将数据保存到SQL Server数据库中 但我想让它松散耦合,这就是为什么我想把这段代码带到Azure函数或逻辑应用程序中以保存数据 目前我使用实体框架,因为它位于ASP.NET MVC应用程序中 以下是我的代码示例: private async Task SaveDatabaseAsync(List<Device> deviceDataList) { // save device information into databa

我有一个ASP.NET MVC应用程序,目前正在将数据保存到SQL Server数据库中

但我想让它松散耦合,这就是为什么我想把这段代码带到Azure函数或逻辑应用程序中以保存数据

目前我使用实体框架,因为它位于ASP.NET MVC应用程序中

以下是我的代码示例:

private async Task SaveDatabaseAsync(List<Device> deviceDataList)
{
    // save device information into database
    _Repository.InsertMultipleDevices(deviceDataList); // used AddRange

    await _Repository.SaveAsync();

    // save message data information into database
    await SaveMessageData(deviceList);
}

private async Task SaveMessageData(List<Device> deviceListData , List<MessageData> messageDataList)
{
    // replace device id PK because device id is FK in Message table which is previously saved SaveDeviceToDatabaseAsync
    foreach (var messageData in messageDataList)
    {
        var deviceData = deviceListData.FirstOrDefault(t => Convert.ToInt32(t.Id.ToString()) == messageData.Id);
        messageData.Id = deviceData?.Id ?? 0;
    }

    MessageDataRepository _messageDataRepository = new MessageDataRepository(new IoTSimulatordbContext());
    _messageDataRepository.InsertMessageDataMultiple(messageData); // used AddRange
    await _messageDataRepository.SaveAsync();
}
private async Task SaveDatabaseAsync(列表设备目录)
{
//将设备信息保存到数据库中
_Repository.InsertMultipleDevices(deviceDataList);//使用的AddRange
wait_Repository.SaveAsync();
//将消息数据信息保存到数据库中
等待SaveMessageData(设备列表);
}
专用异步任务SaveMessageData(List deviceListData、List messageDataList)
{
//替换设备id PK,因为设备id在先前保存为SaveDeviceToDatabaseAsync的消息表中为FK
foreach(messageDataList中的var messageData)
{
var deviceData=deviceListData.FirstOrDefault(t=>Convert.ToInt32(t.Id.ToString())==messageData.Id);
messageData.Id=deviceData?.Id±0;
}
MessageDataRepository\u MessageDataRepository=新建MessageDataRepository(新建IoTSimulatordbContext());
_messageDataRepository.InsertMessageDataMultiple(messageData);//使用的AddRange
wait_messageDataRepository.SaveAsync();
}
现在我正尝试在Azure函数或逻辑应用程序中执行相同的操作。如果记录有数千条,哪一条会更好更快


在这种情况下,如何实现替换FK逻辑?

这是一个架构问题,我强烈建议您阅读。您的问题是询问一种称为命令查询责任分离(Command-Query-Responsibility-Separation,或CQRS)的设计模式。您需要考虑数据库更新中的“最终一致性”的影响,这可以驱动数据库和应用程序业务逻辑的完全重新设计。p> 我的经验是,逻辑应用程序的设置速度比Azure函数快,但是如果您有大量数据,Azure函数的执行速度会更快,成本也会更低。您还需要考虑延迟对用户体验的可能影响。 您应该阅读Troy Hunt的这篇文章:


我主要使用Azure功能来更新Dynamics Customer Engagement(又名CRM),并且我不得不依赖于使用其他Azure功能,例如Azure Service Bus来处理跨多个功能的工作分配,以及处理失败的事务

我不确定我是否完全理解你问的问题。。。显然,没有什么可以阻止您在Azure函数或逻辑应用程序中运行现有的。主要问题是否与如何让几个独立的Azure功能实例能够保存可能相关的数据(设备-消息)有关?是,我正在考虑创建一个http trigger azure函数,我将从mvc应用程序触发该函数,并将device数据和消息数据传递给该azure函数,我将执行存储过程以插入设备表数据和消息表数据,这有意义吗?可能值得考虑的是,拥有一堆Azure函数,充当存储所有者的微服务(SQL或其他实际功能)。。。这包括保存部分和检索部分……您可以提供的任何实现链接都是一个很好的开始,谢谢:)