我有一个函数,我得到一个id列表,我需要返回一个匹配与id相关的描述的列表.例如:
public class CodeData
{
string CodeId {get; set;}
string Description {get; set;}
}
public List<CodeData> GetCodeDescriptionList(List<string> codeIDs)
//Given the list of institution codes, return a list of CodeData
//having the given CodeIds
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我自己创建sql,我会简单地执行以下操作(其中in子句包含codeIds参数中的所有值):
Select CodeId, Description FROM CodeTable WHERE CodeId IN ('1a','2b','3')
Run Code Online (Sandbox Code Playgroud)
在Linq to Sql中我似乎无法找到相当于"IN"的子句.到目前为止我发现的最好(不起作用)是:
var foo = from codeData in channel.AsQueryable<CodeData>()
where codeData.CodeId == "1" || codeData.CodeId == "2"
select codeData;
Run Code Online (Sandbox Code Playgroud)
问题是,我无法动态生成linq到sql的"OR"子句列表,因为它们是在编译时设置的.
如何使用Linq to Sql完成检查列的where子句在动态值列表中?
我有一个Windows服务可执行文件,我知道是用.NET编写的,我需要在不同的服务名称下安装以避免冲突.无论如何,安装都不提供指定服务名称.如果我只能访问二进制文件,那么当我用installutil安装它时,是否还要覆盖服务名称?
我用.NET编写的代码只有在作为Windows服务安装时才会失败.失败不允许服务甚至启动.我无法弄清楚如何进入OnStart方法.
如何:调试Windows服务应用程序提供了一个诱人的线索:
附加到服务的过程允许您调试大多数但不是所有服务的代码; 例如,因为服务已经启动,所以无法以这种方式调试服务的OnStart方法中的代码,或者用于加载服务的Main方法中的代码.解决此问题的一种方法是在服务应用程序中创建临时的第二个服务,该服务仅用于帮助调试.您可以安装这两个服务,然后启动此"虚拟"服务以加载服务进程.一旦临时服务启动了该过程,您就可以使用Visual Studio中的"调试"菜单附加到服务进程.
但是,我不清楚你应该如何创建虚拟服务以加载服务进程.
基本问题:如何在Fluent NHibernate中创建双向一对多地图?
细节:
我有一个有很多孩子的父对象.在我的情况下,孩子没有父母,所以在数据库中,我想外键的母体有NOT NULL约束是没有意义的.我从Fluent NHibernate映射自动生成我的数据库.
我的父母有很多子对象,如下所示:
public class Summary
{
public int id {get; protected set;}
public IList<Detail> Details {get; protected set;}
}
public class Detail
{
public int id {get; protected set;}
public string ItemName {get; set;}
/* public Summary Owner {get; protected set;} */ //I think this might be needed for bidirectional mapping?
}
Run Code Online (Sandbox Code Playgroud)
这是我开始的映射:
public class SummaryMap : ClassMap<Summary>
{
public SummaryMap()
{
Id(x => x.ID);
HasMany<Detail>(x => x.Details);
}
}
public class DetailMap : …Run Code Online (Sandbox Code Playgroud) 鉴于
Expression<Func<T, object>>
Run Code Online (Sandbox Code Playgroud)
(例如x => x.Prop1.SubProp),我想根据需要创建一个字符串"Prop1.SubProp".
在单次访问的情况下(例如x => x.Prop1),我可以轻松地执行以下操作:
MemberExpression body = (expression.Body.NodeType == ExpressionType.Convert) ? (MemberExpression)((UnaryExpression)expression.Body).Operand : (MemberExpression)expression.Body;
return body.Member.Name;
Run Code Online (Sandbox Code Playgroud)
但是,如果存在更深的嵌套,例如x => x.Prop1.SubProp1,则只获得嵌套最深的名称,例如"SubProp1"而不是"Prop1.SubProp1"
反正有没有访问lambda表达式的完整属性路径?
我正在尝试将模式同步到不同的数据库.基本上,我在两个数据库上运行任务 - >使用SQL Server Management Studio生成脚本(2005),并将输出与diff工具进行比较.
出于某种原因,一个脚本添加了约束WITH CHECK和一个WITH NO CHECK,然后重新启用了两个约束.
我得到的第一个数据库:
ALTER TABLE [dbo].[Profile] WITH CHECK ADD CONSTRAINT [FK_Profile_OrganizationID] FOREIGN KEY([OrganizationID])
REFERENCES [dbo].[Organization] ([OrganizationID])
GO
ALTER TABLE [dbo].[Profile] CHECK CONSTRAINT [FK_Profile_OrganizationID]
GO
Run Code Online (Sandbox Code Playgroud)
第二个数据库生成为
ALTER TABLE [dbo].[Profile] WITH NOCHECK ADD CONSTRAINT [FK_Profile_OrganizationID] FOREIGN KEY([OrganizationID])
REFERENCES [dbo].[Organization] ([OrganizationID])
GO
ALTER TABLE [dbo].[Profile] CHECK CONSTRAINT [FK_Profile_OrganizationID]
GO
Run Code Online (Sandbox Code Playgroud)
所以我有两个问题:
最终结果是一样的吗?(编辑: 似乎很多人只关注这两个脚本的第一个语句.我对这两个脚本的最终结果感兴趣.)
如果最终结果相同,为什么Management Studio会针对不同的数据库生成不同的结果?
我知道我可以Map(x => x.GroupName).WithUniqueConstraint()为一个单一的财产.
但是如何在流畅的nHibernate中创建复合唯一约束(其中唯一约束对两列的组合进行操作)?
请考虑以下代码:
DateTime? ndate = null;
Console.WriteLine(ndate.HasValue);
Run Code Online (Sandbox Code Playgroud)
我原本期望一个NullReferenceException,但HasValue确实会返回false.但是,由于ndate为null,属性调用如何成功,因为没有对象可以调用属性HasValue?
所述DbSet <TEntity>.新增方法返回的实体.我通常期望一个Add操作有一个void返回类型.
当我查看EntityFramework源代码时,我看到以下实现:
public virtual TEntity Add(TEntity entity)
{
Check.NotNull(entity, "entity");
GetInternalSetWithCheck("Add").Add(entity);
return entity;
}
Run Code Online (Sandbox Code Playgroud)
GetInternalSetWithCheck 返回一个 InternalSet<TEntity>
有趣的Add方法InternalSet<TEntity>在其签名中有一个void返回类型:
public virtual void Add(object entity)
Run Code Online (Sandbox Code Playgroud)
我担心的是,当我对实体进行修改时,是否需要注意它与添加到DbSet的时间有关.
例如,有哪些情况
var entity = new MyEntity();
_dbSet.Add(entity);
entity.SomeDatModifyingMethod();
_dbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
可能会给出不同的行为
var entity = new MyEntity();
entity.SomeDatModifyingMethod();
_dbSet.Add(entity);
_dbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
或不同的行为:
var entity = new MyEntity();
entity = _dbSet.Add(entity);
entity.SomeDatModifyingMethod();
_dbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
在基本的默认实现中,它并不重要,因为它总是返回完全相同的实例.但是,Add方法是virtual,所以它可以被覆盖(虽然在公共源代码中,唯一的覆盖是测试双 - 但我不确定源代码实际上包括例如SqlServer支持实现).
为什么DbSet Add返回实体实例而不是void?
我有一个基类ScriptBase,它有一个名为的虚函数MyTestInitialize().当我打电话MyTestInitialize()从派生类,则该值testContextInstance是null.这有什么解决方案吗?请帮忙,因为我是自动化测试的新手.提前致谢
[CodedUITest]
public class ScriptsBase
{
public ScriptsBase()
{
}
private static TestContext bingTestContext;
public static TestContext BingTestContext
{
get { return ScriptsBase.bingTestContext; }
set { ScriptsBase.bingTestContext = value;}
}
#region TestInitialize
//Use TestInitialize to run code before running each test
[TestInitialize()]
public virtual void MyTestInitialize()
{
Browser.CloseAllBrowsers();
BingTestContext = testContextInstance;
}
#endregion
#region TestCleanup
//Use TestCleanup to run code after each test has run
[TestCleanup()]
public virtual void MyTestCleanup() …Run Code Online (Sandbox Code Playgroud) c# ×5
.net ×4
linq ×2
nhibernate ×2
debugging ×1
linq-to-sql ×1
mstest ×1
sql-server ×1
ui-testing ×1