C# &引用;无法执行查询错误";在使用NHibernate的Web服务中
正如标题所说,我得到了这个错误: 无法执行查询C# &引用;无法执行查询错误";在使用NHibernate的Web服务中,c#,.net,sql-server,web-services,nhibernate,C#,.net,Sql Server,Web Services,Nhibernate,正如标题所说,我得到了这个错误: 无法执行查询 [选择此Id为Id5\u 0,此用户名为Username5\u 0,此密码哈希为Password3\u 5\u 0,此密码为Salt5\u 0,此令牌为Token5\u 0,此令牌为TokenStamp为TokenStamp5\u 0,此角色为Role5\u 0来自用户this” 中断时出错 我正在尝试在数据库中与用户进行简单登录,用户在数据库中键入用户名和密码散列。我有一个用户数据,每个列上都有Admin要调试 这是我的密码: SQL Serve
[选择此Id为Id5\u 0,此用户名为Username5\u 0,此密码哈希为Password3\u 5\u 0,此密码为Salt5\u 0,此令牌为Token5\u 0,此令牌为TokenStamp为TokenStamp5\u 0,此角色为Role5\u 0来自用户this”
中断时出错 我正在尝试在数据库中与用户进行简单登录,用户在数据库中键入用户名和密码散列。我有一个用户数据,每个列上都有Admin要调试 这是我的密码: SQL Server数据库:
用户
表格:
CREATE TABLE [dbo].[User]
(
[Id] UNIQUEIDENTIFIER NOT NULL,
[Username] NVARCHAR (50) NULL,
[PasswordHash] CHAR (64) NOT NULL,
[Salt] CHAR (64) NOT NULL,
[Role] UNIQUEIDENTIFIER NOT NULL,
[Token] NVARCHAR (50) NOT NULL,
[TokenStamp] DATETIME NULL,
CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_User_Role] FOREIGN KEY ([Role]) REFERENCES [dbo].[Role] ([Id])
);
CREATE TABLE [dbo].[Role]
(
[Id] UNIQUEIDENTIFIER NOT NULL,
[Name] NVARCHAR (50) NULL,
CONSTRAINT [PK_Role] PRIMARY KEY CLUSTERED ([Id] ASC)
);
角色
表格:
CREATE TABLE [dbo].[User]
(
[Id] UNIQUEIDENTIFIER NOT NULL,
[Username] NVARCHAR (50) NULL,
[PasswordHash] CHAR (64) NOT NULL,
[Salt] CHAR (64) NOT NULL,
[Role] UNIQUEIDENTIFIER NOT NULL,
[Token] NVARCHAR (50) NOT NULL,
[TokenStamp] DATETIME NULL,
CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_User_Role] FOREIGN KEY ([Role]) REFERENCES [dbo].[Role] ([Id])
);
CREATE TABLE [dbo].[Role]
(
[Id] UNIQUEIDENTIFIER NOT NULL,
[Name] NVARCHAR (50) NULL,
CONSTRAINT [PK_Role] PRIMARY KEY CLUSTERED ([Id] ASC)
);
WebService.cs
:
using System.Linq;
using System.Net;
using System.Web.Services;
using NHibernate;
using Models;
[WebService(Namespace = "http://LambdAlarm.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class LambdAlarmWebService : WebService
{
[WebMethod]
public HttpStatusCode Login(string username, string passwordHash)
{
var factory = SessionFactory.Instance;
var session = factory.OpenSession();
var result = session.QueryOver<User>().List<User>();
var user = new User();
var login = result.FirstOrDefault(u => u.Username == username);
if (user.Username == login.Username)
{
return HttpStatusCode.OK;
}
return HttpStatusCode.NotFound;
}
}
角色
型号:
using System;
namespace Models
{
public class User : EntityBase
{
public virtual string Username { get; set; }
public virtual string PasswordHash { get; set; }
public virtual string Salt { get; set; }
public virtual Role Role { get; set; }
public virtual string Token { get; set; }
public virtual DateTime TokenStamp { get; set; }
}
}
namespace Models
{
public class Role : EntityBase
{
public virtual string Name { get; set; }
}
}
EntityBase
:(类具有一个由所有模型继承的Guid
属性)
UserMap
:(NHibernate映射)
会话工厂
:
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using Models;
using NHibernate.Conventions;
namespace NHibernate
{
public static class SessionFactory
{
private static ISessionFactory _sessionFactory;
public static ISessionFactory Instance
{
get
{
if (_sessionFactory == null)
{
_sessionFactory = CreateSessionFactory();
}
return _sessionFactory;
}
}
private static ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2012
.ConnectionString(c => c.FromConnectionStringWithKey("DatabaseConnectionString")))
.Mappings(m =>
{
m.FluentMappings.Conventions.AddFromAssemblyOf<CustomForeignKeyConvention>();
m.FluentMappings.AddFromAssemblyOf<EntityBase>();
})
.BuildSessionFactory();
}
}
}
差不多就是这样。如果有人能帮忙,我将不胜感激……User是sql中的保留字。您可以重命名您的表或让nhibernate在表名周围使用``我想如果您更改
Table("User");
到
它会起作用。我认为这是正确的方法-“NHibernate在运行时用所选数据库方言的正确转义序列替换backticks“你看过所有内在的例外吗?大多数情况下,这将包含对实际错误的有用解释。您引用的异常文本只是NHibernate为真实错误信息提供额外上下文的方式。
using FluentNHibernate;
using FluentNHibernate.Conventions;
namespace NHibernate.Conventions
{
public class CustomForeignKeyConvention : ForeignKeyConvention
{
protected override string GetKeyName(Member property, System.Type type)
{
if (property == null)
{
return type.Name;
}
return property.Name;
}
}
}
Table("User");
Table("`User`");