标签: azure-sql-database

实体框架上的懒惰与急切加载性能

所以我的DbContext上有以下模型类:

贷款

每次我渲染一个LoanApplication对象列表时,我都会这样做:

var context = new MyContext();
var applications = context.LoanApplications.Where(d => d.PropertyThatIWantToFilter = localVariable);
Run Code Online (Sandbox Code Playgroud)

这将返回一个IQueryable,然后我在我的控制器方法调用上转换为这样的ViewModel:

var vm = applications.Select(d => new LoanApplicationViewModel(d));
Run Code Online (Sandbox Code Playgroud)

LoanApplicationViewModel构造函数内部,我接受实体对象并执行相应的映射.问题在于,由于Solicitors集合是一个导航属性,因此每次实例化新的视图模型时都会对数据库进行调用.每个应用程序的平均律师数量是两个,这意味着如果我呈现一个列出最后10个应用程序的表,那么该应用程序将大约18-20次访问数据库.

我认为必须有一个更好的方法来获得这个集合,所以我改变了我的原始查询以急切加载集合,如下所示:

var applications = context.LoanApplications.Include("Solicitors").Where...
Run Code Online (Sandbox Code Playgroud)

虽然这会将对数据库的调用次数减少到只有一次,但查询速度要慢得多,大约慢50%.

该数据库托管在SQL Azure中,我们已经实现了瞬态故障处理,但我想,以减少不降低响应时间的性能对数据库进行调用的数量.

这里的最佳做法是什么?

c# asp.net-mvc entity-framework code-first azure-sql-database

9
推荐指数
2
解决办法
2万
查看次数

SELECT*中有时会丢失计算列

在SQL Azure中,我有一个或多或少像这样设置的表,有两个计算列(IsExpiredIsDeadlineExpired),只是将不可为空的日期时间列与当前时间进行比较:

CREATE TABLE [dbo].[Stuff]
(
   [StuffId] int NOT NULL IDENTITY(1,1),
   [Guid] uniqueidentifier NOT NULL,
   [ExpirationDate] datetime NOT NULL,
   [DeadlineDate] datetime NOT NULL,
   [UserId] int NOT NULL,
   [IsExpired] AS CAST((CASE WHEN [ExpirationDate] < GETUTCDATE() THEN 1 ELSE 0 END) AS bit),
   [IsDeadlineExpired] AS CAST((CASE WHEN [DeadlineDate] < GETUTCDATE() THEN 1 ELSE 0 END) AS bit),
   CONSTRAINT [PK_StuffId] PRIMARY KEY ([StuffId]),
   CONSTRAINT [UNQ_Guid] UNIQUE([Guid]),
)
GO
Run Code Online (Sandbox Code Playgroud)

我有一个包含多个结果集的存储过程,其中一个结果集:

SELECT * FROM [dbo].[Stuff] WHERE [Guid] = @guid
Run Code Online (Sandbox Code Playgroud)

我最近发现表明,有时当结果集读取错误日志SqlDataReader …

sql azure azure-sql-database

9
推荐指数
1
解决办法
534
查看次数

是否有在Windows Azure上运行的CMS系统?

我希望使用Windows Azure和SQL Azure构建一个新网站.有没有人知道我可以用作Web角色的任何商业或免费CMS系统,它们将连接并使用SQL Azure作为存储?

azure content-management-system azure-sql-database

8
推荐指数
2
解决办法
1万
查看次数

使用SQL Server Management Studio的SQL Azure数据库

我一直在努力研究是否可以使用SSMS这样的GUI来管理(即添加表,修改它们,创建存储过程)SQL Azure数据库,并且我不断遇到不同的答案.

我在2009年底发现了一篇帖子,说它会在SSMS中得到支持,但我不确定是否包含Express版本?有人知道快递版本的最新更新是什么以及它是否支持它?

我认为我说它在Visual Web Developer 2010中无法完成(而且我买不起全胖的VS2010).

我准备考虑替代方案,但是如果有人知道任何与SQL azure一起使用的完整功能GUI工具,并且我不介意支付商业许可证,如果它不是太昂贵.

谢谢.

sql sql-server azure-sql-database

8
推荐指数
1
解决办法
4113
查看次数

为什么我的Azure SQL数据库删除查询性能如此之慢?

我有一个大约9GB的Azure Sql数据库.它提供一个Web应用程序,每小时处理大约135K请求.大多数数据都是短暂的,它会在几分钟到五天内存放在数据库中并被删除.每天大约10GB通过数据库移动.

我试图在表上运行删除查询,从350,000条记录中删除约250,000条记录.大约10%的记录有一个或两个nvarchar(max)值足够大,可以存储在LOB存储中.

在周末,我试图一次删除它们.它在我取消查询之前运行了四个小时,然后它又回来了8个小时 - 糟糕的举动.我真的没想到它会那么糟糕.

然后我尝试了另一种方法.这个批处理在晚上运行,当时Web应用程序每小时处理大约100K请求.tblJobs Id字段是唯一标识符,它是主键.

insert @tableIds select Id from dbo.tblJobs with(nolock) 
where (datediff(day, SchedDate, getDate()) > 60)  
   or (datediff(day, ModifiedDate, getDate()) > 3 and ToBeRemoved = 1)

set @maintLogStr = 'uspMaintenance [tblJobs] Obsolete J records count @tableIds: ' + convert(nvarchar(12), (select count(1) from @tableIds))
insert dbo.admin_MaintenanceLog(LogEntry) values(@maintLogStr)

set @maintLogId = newid()
set @maintLogStr = 'uspMaintenance [tblJobs] Obsolete J records beginning loop...'
insert dbo.admin_MaintenanceLog(Id, LogEntry) values(@maintLogId, @maintLogStr)

while exists(select * from @tableIds)
begin
    delete @tableIdsTmp
    begin transaction …
Run Code Online (Sandbox Code Playgroud)

t-sql azure azure-sql-database

8
推荐指数
1
解决办法
2468
查看次数

为什么Azure数据库在事务中表现更好

我们决定对Azure数据库使用微操作.由于我们的业务只需要"插入"和"选择",我们决定禁止所有代码管理SqlTransaction(没有数据的并发问题).

然后,我们注意到我们的Azure数据库实例反应非常缓慢." rpc completed "事件发生的延迟是运行简单sql语句所需时间的数百倍.

接下来,我们使用EF6对代码进行基准测试,我们发现服务器响应非常快.当EF6实现内置事务时,我们决定恢复SqlTransaction微观orm上的(ReadCommited),我们发现一切都很好.

Azure数据库是否需要显式SqlTransaction(由代码管理)?SqlTransactionAzure数据库的表现如何影响?为什么这样实现?

编辑:我将发布一些关于我们收集痕迹的方式的更准确的信息.我们的Azure事件日志有时以纳秒表示,有时以毫秒为单位.看起来很奇怪.

ado.net distributed-transactions micro-orm entity-framework-6 azure-sql-database

8
推荐指数
1
解决办法
215
查看次数

Azure管理门户中的SQL Azure EF数据库第一个连接字符串

我有一个运行n Azure的站点,它使用EF Database First模型.

如果我在web.config中嵌入连接字符串并且部署all是美好的.

<add name="MyEntities" connectionString="metadata=res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl;provider=System.Data.SqlClient;provider connection string='Data Source=my.database.windows.net;Initial Catalog=myTest_DB;User ID=***;Password=***; MultipleActiveResultSets=False'"  providerName="System.Data.EntityClient"/>
Run Code Online (Sandbox Code Playgroud)

但是,我不希望web.config中的连接字符串,因为它包含凭据.

所以我将它移动到Azure Properties中的连接字符串区域.

我遇到的第一个问题是获取元数据无效关键字错误

我通过将类型从SQL数据库更改为自定义来解决这个问题.

在此输入图像描述

但是,我现在收到此错误:

应用程序配置文件中的连接字符串"MyEntities"不包含必需的providerName属性."

我已经在网上搜索并尝试了很多连接字符串,但还没找到正确的连接字符串.

注意:我想我可以将它设置为应用程序设置并将字符串的初始化移动到代码,但即使只是为了好奇,我想知道如何通过门户网站进行操作.

entity-framework connection-string azure azure-management azure-sql-database

8
推荐指数
1
解决办法
4519
查看次数

更改Azure数据库端口

是否可以更改azure服务器使用的端口?我目前只看到添加可用于访问服务器的IP地址的功能.或者是否要求防火墙允许端口1433出站流量?

azure azure-sql-database

8
推荐指数
1
解决办法
5080
查看次数

SQL Server将datetime转换为date而不为null

我有一个像这样的存储过程:

select 
    TransactionDate 
from 
    (select 
         cast(TransactionDate as Date) as TransactionDate
     from RetailTransaction) t
Run Code Online (Sandbox Code Playgroud)

但是,这使得TransactionDate外部选择的RetailTransaction.TransactionDate列可以为空,而列不为空.

RetailTransaction.TransactionDate 定义/设计:

在此输入图像描述

内部选择:

内在选择

外选择:

外选择

即使在添加isnullcoalesceSQL Server/SSMS之后仍然显示外部选择TransactionDate列仍然可以为空.

select 
    TransactionDate 
from 
    (select 
         isnull(cast(TransactionDate as Date), getdate()) as TransactionDate
     from 
         RetailTransaction) t
Run Code Online (Sandbox Code Playgroud)

例2

如何使TransactionDate列不可为空?

请注意,该数据库位于Azure上,兼容级别为100(SQL Server 2008).

编辑:

isnull在外部选择上添加仍然使列可以为外部嵌套查询:

外嵌套查询

t-sql sql-server ssms azure-sql-database

8
推荐指数
1
解决办法
221
查看次数

使用 Active Directory 连接到 Azure DB - 通用,并在 C# 中使用 MFA 支持身份验证

我需要从 C# 控制台应用程序访问 SQL 表数据的某些部分。我需要帮助从 C# 建立服务器连接。

数据库详细信息:

 Server type : Database Engine
 Authentication : Active Directory-Universal with MFA support.
Run Code Online (Sandbox Code Playgroud)

另请让我知道我应该如何提供我的连接属性?

c# azure azure-active-directory azure-sql-database multi-factor-authentication

8
推荐指数
2
解决办法
1万
查看次数