如何在Subsonic中构建此格式的查询
(ConditionA OR ConditionB)AND ConditionC
我尝试了各种方法,但我似乎无法得到理想的结果.
这是我厌倦的一件事:
Query q = Challenge.CreateQuery();
q.WHERE(Challenge.Columns.ChallengeeKey, playerKey)
.OR(Challenge.Columns.ChallengerKey, playerKey);
q.AND(Challenge.Columns.Complete, false);
Run Code Online (Sandbox Code Playgroud) 在Nhibernate中,您可以通过在BeginRequest期间创建会话并在EndRequest处关闭来启动会话
public class Global: System.Web.HttpApplication
{
public static ISessionFactory SessionFactory = CreateSessionFactory();
protected static ISessionFactory CreateSessionFactory()
{
return new Configuration()
.Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "hibernate.cfg.xml"))
.BuildSessionFactory();
}
public static ISession CurrentSession
{
get{ return (ISession)HttpContext.Current.Items["current.session"]; }
set { HttpContext.Current.Items["current.session"] = value; }
}
protected void Global()
{
BeginRequest += delegate
{
CurrentSession = SessionFactory.OpenSession();
};
EndRequest += delegate
{
if(CurrentSession != null)
CurrentSession.Dispose();
};
}
}
Run Code Online (Sandbox Code Playgroud)
亚音速中的等价物是什么?
我理解的方式,Nhibernate将在endrequest关闭所有连接.
原因:虽然在Subsonic项目中拍摄一些遗留代码时出现问题,但我得到了很多MySQL超时,这表明代码没有关闭连接
MySql.Data.MySqlClient.MySqlException:连接错误:超时已过期.从池中获取连接之前经过的超时时间.这可能是因为所有池连接都在使用中并且达到了最大池大小.生成:Tue,2009年8月11日05:26:05 GMT System.Web.HttpUnhandledException:抛出了类型'System.Web.HttpUnhandledException'的异常.---> MySql.Data.MySqlClient.MySqlException:连接错误:超时已过期.从池中获取连接之前经过的超时时间.这可能是因为所有池连接都在使用中并且达到了最大池大小.在MySql.Data.MySqlClient.MySqlPool.GetConnection()在SubSonic.MySql上的MySql.Data.MySqlClient.MySqlConnection.Open()处SubSonic.MySqlDataProvider.CreateConnection(String newConnectionString)SubSonic.MySqlDataProvider.CreateConnection()at SubSonic.AutomaticConnectionScope..ctor( DataSvider提供者)SubSonic的SubSonic.MySqlDataProvider.GetReader(QueryCommand qry),SubSonic上的SubSonic.DataService.GetReader(QueryCommand cmd).ReadadByParam(String columnName,Object paramValue)
我的连接字符串如下
<connectionStrings> …Run Code Online (Sandbox Code Playgroud) 刚从Subsonic 2.2 ActiveRecord更新到3.0.0.3.我正在尝试使用LINQ来执行这样的分页查找查询(我的对象/表称为"存储库"):
Repository.Find(item => item.DocumentTitle.Contains(searchTerm))
.OrderBy(i => i.DocumentTitle).Skip((currentPage - 1) * itemsPerPage)
.Take(itemsPerPage);
Run Code Online (Sandbox Code Playgroud)
当我使用SQL Server Profiler查看此查询生成的SQL时,SQL中没有分页,所有分页都在C#的内存中完成.现在,Subsonic查询语言确实有一个很好的GetPaged过程可以正常工作,但我认为LINQ也应该这样做.我在这里错过了什么或者这是LINQ的限制吗?
我知道这个Repository.GetPaged()函数,但是没有足够的参数 - 我需要做一个动态排序,以及一个Find().
我有一个"笔记"表.Notes支持一级线程 - 换句话说,您可以回复一个注释,但无法回复另一个回复.所以表格如下所示:
CREATE TABLE [dbo].[Notes] (
[NoteId] [uniqueidentifier] ROWGUIDCOL NOT NULL DEFAULT (newid())
CONSTRAINT [PK__Notes]
PRIMARY KEY ([NoteId]),
[ParentNoteId] UNIQUEIDENTIFIER NULL,
[NoteText] NVARCHAR(MAX) NOT NULL,
[NoteDate] DATETIME NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
所以我使用Subsonic活动记录来获取所有"父"笔记:
var allNotes = (from n in Note.All()
where n.ParentNoteId == null
orderby n.NoteDate descending
select n)
.Skip((pageIndex - 1) * pageSize).Take(pageSize);
Run Code Online (Sandbox Code Playgroud)
接下来,我只循环遍历IQueryable并填写注释Guids的通用列表:
List<Guid> noteList = new List<Guid>();
foreach (var note in allNotes)
{
noteList.Add(note.NoteId);
}
Run Code Online (Sandbox Code Playgroud)
最后,我试图构建一个查询来获取原始查询中的所有回复:
replies = from n in Note.All()
where n.ParentNoteId != null && noteList.Contains(n.ParentNoteId.Value) …Run Code Online (Sandbox Code Playgroud) 我有一个包含Subsonic生成和增强代码的DLL来访问数据模型.实际上,它是原始程序集的合并DLL,Subsonic本身和一些其他引用的DLL到一个程序集中,称为"PowershellDataAccess.dll.但是,应该注意的是,我也尝试过这个引用每个程序集脚本以及也不起作用.
然后我尝试使用该程序集中的对象和方法.在这种情况下,我正在访问一个使用Subsonic加载一堆记录并从这些记录创建Lucene索引的类.
我遇到的问题是调用Subsonic方法从数据库中检索数据说它无法找到连接字符串.我将AppDomain指向适当的配置文件,该文件确实包含该连接字符串.
这是脚本.
$ScriptDir = Get-Location
[System.IO.Directory]::SetCurrentDirectory($ScriptDir)
[Reflection.Assembly]::LoadFrom("PowershellDataAccess.dll")
[System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", "$ScriptDir\App.config")
$indexer = New-Object LuceneIndexingEngine.LuceneIndexGenerator
$indexer.GeneratePageTemplateIndex("PageTemplateIndex");
Run Code Online (Sandbox Code Playgroud)
我开始深入研究Subsonic本身,而Subsonic中的以下行正在寻找连接字符串并抛出异常:
ConfigurationManager.ConnectionStrings[connectionStringName]
Run Code Online (Sandbox Code Playgroud)
因此,出于好奇,我创建了一个具有单个类的程序集,该类具有单个属性,只运行该行以检索连接字符串名称.
我创建了一个调用该程序集的ps1 并命中该属性.那个原型可以很好地找到连接字符串.
任何人都知道为什么Subsonic的部分似乎看不到连接字符串?
考虑以下代码行:
private void DoThis() {
int i = 5;
var repo = new ReportsRepository<RptCriteriaHint>();
// This does NOT work
var query1 = repo.Find(x => x.CriteriaTypeID == i).ToList<RptCriteriaHint>();
// This DOES work
var query1 = repo.Find(x => x.CriteriaTypeID == 5).ToList<RptCriteriaHint>();
}
Run Code Online (Sandbox Code Playgroud)
因此,当我将实际数字硬连接到lambda函数时,它工作正常.当我将捕获的变量用于表达式时,它返回时出现以下错误:
从对象类型ReportBuilder.Reporter + <> c__DisplayClass0到已知的托管提供程序本机类型不存在映射.
为什么?我该如何解决?
我想添加基本的日志记录,并对SubSonic 2.1生成的类进行一些其他微小的更改(我没有使用SubSonic 3.0 t4模板).
有没有办法在不修改SubSonic源代码的情况下执行此操作?
保存记录后如何立即获取记录ID(主键)?我将ID列作为自动生成.在保存该对象之前,我需要将ID作为"外键"传递给另一个对象.
目前我这样做
Product.Save()
Run Code Online (Sandbox Code Playgroud)
我不能
int id = Product.Save()
Run Code Online (Sandbox Code Playgroud) 我的网站在我的网站上使用Subsonic 2.2.
我有一个奇怪的情况,我需要运行一些特殊的SQL语句.
public IList<string> GetDistincList(string TableName, string FieldName)
{
string sqlToRun = string.Format("SELECT DISTINCT {0} FROM {1} ORDER BY {0}", FieldName, TableName);
Query query = new Query(TableName);
query.PleaseRunThis(sqlToRun);
query.ExecuteReader();
}
Run Code Online (Sandbox Code Playgroud)
有人能帮我一下吗?看来,我只想返回一个通用的字符串列表.
谢谢!
subsonic ×10
c# ×3
linq ×2
subsonic3 ×2
.net ×1
activerecord ×1
c#-3.0 ×1
database ×1
lambda ×1
object ×1
paging ×1
powershell ×1
primary-key ×1
subsonic2.2 ×1
variables ×1