小编Ahm*_*mel的帖子

如何在创建索引时选择列?

这似乎是一个奇怪的问题.我知道sql server中的不同类型的索引(集群,非集群,唯一,过滤,包含列的索引......等),我知道如何创建它们.另外我知道索引依赖于查询,但我不知道是谁在创建索引时选择列.例如,假设一个允许用户发布文本和图像的简单网站.该网站有一个简单的两个表格,如图所示:

如何在创建索引时选择列

获取网站用户的查询是:

Select UserID,UserName from User where Email='something' and Password='something'
Run Code Online (Sandbox Code Playgroud)

假设我想为这个表创建索引,我应该在创建索引时包含哪些列?我知道不同类型的索引可能包含不同的列,但我可以决定何时创建聚簇或非聚簇应选择哪些列.我看到一些索引的例子几乎总是在where子句之后选择列.这是真的 ?

获取用户帖子的查询是:

Select * from Posts where UserID='something'
Run Code Online (Sandbox Code Playgroud)

此查询与第一个查询不同.此查询可能返回多行,而第一行将始终返回一行.现在同样的问题,如何选择列?

我想说的是如何在以下情况下选择列:

  1. 创建聚簇索引.
  2. 创建非聚集索引.
  3. 使用包含的列创建非群集.

上面的例子只是为了说明问题的想法.目标不是为示例中的两个查询找到一个好的索引,而是想出一个可以在创建索引时帮助选择列的基础.

sql-server indexing

18
推荐指数
1
解决办法
9058
查看次数

SignInManager.PasswordSignInAsync生成许多数据库访问

在我的应用程序中,我使用ASP.NET身份.每件事都很好但通过测试,我发现以下命令产生了许多数据库访问:SignInManager.PasswordSignInAsync:

var result = await SignInManager.PasswordSignInAsync(user.UserName, model.Password, model.RememberMe, shouldLockout: true);
Run Code Online (Sandbox Code Playgroud)

我在使用性能测试测试应用程序时发现了这个问题.测试表明登录请求需要很长时间才能获得响应.下图显示了登录请求的性能测试结果: 在此输入图像描述.

然后我使用SQL Server Profiler来检查执行命令SignInManager.PasswordSignInAsync时会发生什么.它表明生成了大量的数据库访问.以下内容取自SQL Server Profiler:

exec sp_executesql N'SELECT TOP (1) 
    [Extent1].[Id] AS [Id], 
    [Extent1].[UserFullName] AS [UserFullName], 
    [Extent1].[UserId] AS [UserId], 
    [Extent1].[Online] AS [Online], 
    [Extent1].[LastOnlineDate] AS [LastOnlineDate], 
    [Extent1].[BrithDate] AS [BrithDate], 
    [Extent1].[Job] AS [Job], 
    [Extent1].[Gender] AS [Gender], 
    [Extent1].[CountryId] AS [CountryId], 
    [Extent1].[LivesIn] AS [LivesIn], 
    [Extent1].[RelationId] AS [RelationId], 
    [Extent1].[Religion] AS [Religion], 
    [Extent1].[FirstSchool] AS [FirstSchool], 
    [Extent1].[SecondSchool] AS [SecondSchool], 
    [Extent1].[University] AS [University], 
    [Extent1].[ContactInfo] AS [ContactInfo], 
    [Extent1].[Email] AS [Email], 
    [Extent1].[EmailConfirmed] AS [EmailConfirmed], 
    [Extent1].[PasswordHash] AS [PasswordHash], 
    [Extent1].[SecurityStamp] …
Run Code Online (Sandbox Code Playgroud)

sql-server asp.net asp.net-mvc sql-server-profiler asp.net-identity

10
推荐指数
1
解决办法
450
查看次数

使用 SendGrid 发送电子邮件需要很长时间

我在 asp.net mvc 中使用 SendGrid。我使用此代码发送电子邮件:

var myMessage = new SendGridMessage();
myMessage.From = new MailAddress("john@example.com");
myMessage.AddTo("testing@something.com");
myMessage.Subject = "Subject";

myMessage.Text = "testing";
var credentials = new NetworkCredential("*********@azure.com", "");
Web transportWeb = new Web(credentials);
await transportWeb.DeliverAsync(myMessage);
Run Code Online (Sandbox Code Playgroud)

问题是电子邮件大约需要 5 分钟才能到达目的地。这是正常情况吗?如果正常的话我该如何减少这个时间?

asp.net email azure sendgrid

9
推荐指数
0
解决办法
8699
查看次数

在Xamarin表单中为Sqlite文件添加密码

我有一个Xamarin表单应用程序,它创建一个Sqlite数据库.

Microsoft.EntityFrameworkCore.Sqlite用于创建数据库.我想为文件添加密码.我搜索了互联网,但不幸的是我找不到任何明显的方法.在StackOverflow上,有一些问题与我的问题类似,但是,该平台不是Xamarin Forms.

以下是问题:

这是我创建数据库的代码:

public class DoctorDatabaseContext : DbContext
{
        private readonly string DatabasePath;

        public virtual DbSet<OperationsNames> OperationsNames { get; set; }
        public virtual DbSet<CommonChiefComplaint> CommonChiefComplaint { get; set; }
        public virtual DbSet<CommonDiagnosis> CommonDiagnosis { get; set; }
        public virtual DbSet<CommonLabTests> CommonLabTests { get; set; }

        public DoctorDatabaseContext(string DatabasePath)
        {
            FixedDatabasePath.Path = this.DatabasePath = DatabasePath;

            Database.EnsureCreated();    
        }    

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlite($"Filename={DatabasePath}");    
        }
    }
Run Code Online (Sandbox Code Playgroud)

c# sqlite xamarin.forms entity-framework-core

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

密码保护的SQLite与实体框架核心

我正在尝试创建一个受密码保护的SQLite数据库,以便在使用Entity Framework Core的WPF应用程序中使用它.

我找到了如何从现有的SQLite DB(数据库第一种方法)生成我的DbContext和实体,但我无法使用受密码保护的DB.

实际上,我甚至不确定如何创建受密码保护的SQLite DB.加密数据库和受密码保护的数据库有什么区别?

c# sqlite entity-framework-core

6
推荐指数
1
解决办法
5140
查看次数

选择用于在Xamarin表单中存储文件的路径

我有一个Xamarin表单应用程序,我想保存文件,并且当用户在手机中打开文件管理器或手机连接到计算机时,应该显示该文件。我读了这篇文章,但问题是文件存储到Environment.SpecialFolder.Personal该位置,并且用户无法打开此路径。我也发现这个插件做的完全一样。它将文件存储到路径Environment.SpecialFolder.Personal。当我尝试将文件保存在另一个位置时,总是出现错误消息:

拒绝访问路径“ ..”

我应该使用哪个路径保存文件?

c# xamarin.forms

6
推荐指数
3
解决办法
5804
查看次数

在Xamarin Forms中登录后更改页面

我有xamarin表单应用程序,具有登录页面.当用户成功登录时,应用程序将导航到MainPageMenu主详细信息页面.我也有同样的问题.这是我在app.cs中的代码:

public App ()
{
    InitializeComponent();
    if (ApplicationSettings.NotLogin()) // Method to check if use if logged in or not
       MainPage = new LoginPage();            
    else            
       MainPage = new NavigationPage(new MainPageMenus());
}
Run Code Online (Sandbox Code Playgroud)

在登录页面中,我写了这段代码:

//Some code for login .....

MasterDetailPage fpm = new MasterDetailPage
{
      Master = new MainPageMenus(),
      Detail = new NavigationPage(new MainPage())
};
Application.Current.MainPage = fpm;
Run Code Online (Sandbox Code Playgroud)

应用程序正确导航到fpm页面,但问题是,当我按下菜单图标时,我得到的详细信息页面不是母版页面.

这个问题类似于一个描述,在此职位.并且上面的代码被选为问题的答案.但代码对我不起作用.在堆栈溢出中,有一个类似的问题,答案是使用这个:

Application.Current.MainPage = new NavigationPage(new MainPageMenus());
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,菜单图标被隐藏.

这是MainPageMenus的Xml:

<?xml version="1.0" encoding="utf-8" ?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"             
                  xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"             
                  x:Class="XProject.Menus.MainPageMenus"                                    
                  xmlns:local="clr-namespace:XProject"
                  Title="E-Clinic" …
Run Code Online (Sandbox Code Playgroud)

c# xaml xamarin xamarin.forms

6
推荐指数
1
解决办法
3622
查看次数

我们可以完全依赖数据库引擎优化顾问吗?

我读到了有关数据库引擎优化顾问以及它如何为给定查询建议索引的内容.我的问题是,在创建索引时,我可以完全依赖这些建议吗?

sql-server indexing

5
推荐指数
2
解决办法
487
查看次数

我们可以扩展HttpContext.User.Identity在asp.net中存储更多数据吗?

我使用asp.net身份.我创建了实现用户身份的默认asp.net mvc应用程序.该应用程序使用HttpContext.User.Identity来检索用户ID和用户名:

string ID = HttpContext.User.Identity.GetUserId();
string Name = HttpContext.User.Identity.Name;
Run Code Online (Sandbox Code Playgroud)

我可以自定义AspNetUsers表.我在这个表中添加了一些属性,但希望能够从HttpContext.User中检索这些属性.那可能吗 ?如果有可能,我该怎么办?

c# asp.net-mvc asp.net-identity asp.net-identity-3

5
推荐指数
1
解决办法
4641
查看次数

无法使用Facebook SDK for asp.net获取电子邮件地址

我正在使用Facebook SDK来获取用户的电子邮件.我在Startup.Auth.css类中编写此代码:

        var x = new FacebookAuthenticationOptions();
        x.Scope.Add("email");
        x.AppId = "421656951358309";
        x.AppSecret = "5a2e5ccf163fe6918b6d6fdc8dda5184";
        x.Provider = new FacebookAuthenticationProvider()
        {
            OnAuthenticated = async context =>
            {

                context.Identity.AddClaim(new System.Security.Claims.Claim("FacebookAccessToken", context.AccessToken));
            }
        };
        x.SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie;
        app.UseFacebookAuthentication(x);
Run Code Online (Sandbox Code Playgroud)

在控制器中,我使用两种方法来获取电子邮件,但两种方法都失败了.这是方法:

方法1:默认情况下,执行第一行后,变量信息具有电子邮件属性.但它总是返回null.

var info = await AuthenticationManager.GetExternalLoginInfoAsync();
string email = info.Email;
Run Code Online (Sandbox Code Playgroud)

方法2:我使用以下代码,它也返回null.

var fb = new FacebookClient(access_token.Value);
dynamic me = fb.Get("email");
string email = me.email;
Run Code Online (Sandbox Code Playgroud)

我错过了什么 ?或者我可以使用另一种方法.我可以获得其他信息,如用户名,但对于电子邮件,我不能.

asp.net facebook facebook-login

3
推荐指数
1
解决办法
686
查看次数