使用布尔列从数据库获取记录时遇到问题.我无法改变数据库结构.
数据库类型是Character(1)(PostgreSQL),其中't'表示true,'f'表示false.我使用过PostgreSQLDialect.
我试过把它放在hibernate配置中
<property name="query.substitutions">1 't',0 'f'</property>
Run Code Online (Sandbox Code Playgroud)
我试图用方言覆盖
public override string ToBooleanValueString(bool value)
{
return value ? "t" : "f";
}
Run Code Online (Sandbox Code Playgroud)
映射是:
Map(x => x.IsTemplate).Column("template_p");
Run Code Online (Sandbox Code Playgroud)
仍然没有工作,任何帮助?
我目前正在查看我们在.Net Framework 2.0 Windows服务(C#)中遇到的问题,该服务具有X个运行MTA线程以访问COM组件.每个线程初始化它自己的com组件对象的实例.com组件对象没有任何UI元素.它只是业务逻辑,它与sql server数据库和带有com接口的C#dll进行通信,而com接口又进行套接字通信并访问同一个sql server数据库.
通过我的研究,我发现你不应该在MTA线程上实例化STA COM组件,但我找不到任何特定的文本来说明这是什么危险或者可能是因为我不理解COM线程公寓那很好.
上面描述的模型会出现并发问题吗?即使每个MTA线程都在创建自己的STA COM对象?
我们实际遇到的问题是对象引用未设置为以下代码块中连接字符串的setter中的对象错误的实例.这发生在c ++ COM对象调用的C#COM对象中:
IDbConnection connection;
//Code omitted for brevity where connection is initialized
connection.ConnectionString = myConnectionString;
Run Code Online (Sandbox Code Playgroud)
异常类型:System.NullReferenceException消息:未将对象引用设置为对象的实例.数据:System.Collections.ListDictionaryInternal TargetSite:System.Data.OracleClient.OracleClient.OracleClient.OracleConnection.set_ConnectionString(String value)中System.Data.OracleClient.OracleConnection.ConnectionString_Set(String value)处的Void ConnectionString_Set(System.String)
我试图了解社区其他人如何测试他们的Fluent Nhibernate映射.所以我想说我有以下映射:
public UserHeaderMap()
{
Table("USER_HEADER");
Id(x => x.Id, "USER_ID");
Map(x => x.LoginName, "LOGIN_NAME");
Map(x => x.UserPassword, "USER_PASSWORD");
Map(x => x.UserEmail, "USER_EMAIL");
Map(x => x.UserLanguage, "USER_LANGUAGE");
Map(x => x.UserEnabled, "USER_ENABLED");
HasManyToMany(x => x.Groups)
.Table("USER_GROUP_COMPOSITE")
.ParentKeyColumn("USER_ID")
.ChildKeyColumn("GROUP_ID")
.Cascade.All()
.Inverse();
}
public class GroupHeaderMap : ClassMap<GroupHeader>
{
public GroupHeaderMap()
{
Table("GROUP_HEADER");
Id(x => x.Id, "GROUP_ID");
Map(x => x.Name, "GROUP_NAME");
Map(x => x.Description, "GROUP_DESCRIPTION");
HasManyToMany(x => x.Users)
.Table("USER_GROUP_COMPOSITE")
.ParentKeyColumn("GROUP_ID")
.ChildKeyColumn("USER_ID");
}
}
Run Code Online (Sandbox Code Playgroud)
你会为这些单元测试做什么?你会使用PersistenceSpecification类对这些进行单元测试吗?
编辑:
我想使用SqlLite,但如果我没有从映射生成我的模式怎么办?我还能以某种方式将我的架构加载到SqlLite吗?另外我想知道测试SqlLite是否足够.我们的产品至少需要运行MS SQL和Oracle.仅在SqlLite数据库上进行测试是否符合我的要求?您是否通常测试已映射的每个实体(构造函数,属性等)?
如果我有类似下面的方法,我可以在这里省略catch块以获得相同的结果吗?:
private ClassInstance GetMeANumber()
{
Resource a = null;
try
{
Resource a = new Resource();
return a.GetClassInstance();
}
catch
{
throw;
}
finally
{
if(a != null)
a.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud) 我目前在让log4net在特定dll中工作时遇到问题。我当前在我的测试应用程序调用的其他dll中使用log4net,并且在这些dll中以及我的测试应用程序中的日志记录工作正常。这是我遇到的一个特定的dll。这是我遇到问题的dll代码的片段。
//This is from ABC.dll
public class SessionFactory
{
protected static ISessionFactory sessionFactory;
private static readonly ILog log = LogManager.GetLogger(typeof(SessionFactory));
private static void Init()
{
try
{
//Read the configuration from hibernate.xml.cfg or app.config
Configuration normalConfig = new Configuration().Configure();
ConfigureNhibernateValidator(normalConfig);
log.Debug("Initializing session factory");
sessionFactory = Fluently.Configure(normalConfig)
.Mappings(m =>
m.FluentMappings
.AddFromAssemblyOf<OrderHeaderMap>()
.Conventions.AddFromAssemblyOf<PascalCaseColumnNameConvention>())
.ProxyFactoryFactory("NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu")
.BuildSessionFactory();
log.Debug("Finished initializing the session factory");
}
catch(Exception ex)
{
//Code not shown
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我的测试应用中,我正在调用:
log4net.Config.XmlConfigurator.Configure();
Run Code Online (Sandbox Code Playgroud)
这是我的App.config文件中的log4net配置:
//This is from ABC.dll
public class SessionFactory
{ …Run Code Online (Sandbox Code Playgroud) 我有一个叫做的类Location,我需要在其成员变量中添加一个CArray.此更改导致需要重载赋值运算符.
有没有办法复制在我进行更改之前复制的此类类型中的所有变量,只需添加其他代码来复制CArray而不单独复制每个成员变量?
Location& Location::operator=(const Location &rhs)
{
// Only do assignment if RHS is a different object from this.
if (this != &rhs)
{
//Copy CArray
m_LocationsToSkip.Copy(rhs.m_LocationsToSkip);
//Copy rest of member variables
//I'd prefer not to do the following
var1 = rhs.var1;
var2 = rhs.var2;
//etc
}
return *this;
}
Run Code Online (Sandbox Code Playgroud) 我想在wcf服务中使用以下命令在日志消息中记录用户:
log4net.ThreadContext.Properties["user"] = this.currentUser.LoginName;
Run Code Online (Sandbox Code Playgroud)
我已设置要在中运行的服务InstanceContextMode.PerSession。在对wcf服务的初始调用中,我将此ThreadContext属性设置为已登录的当前用户,但随后的每次调用都不会记录此属性。
我非常确定,即使将其设置为use,对于服务的每次调用也会在不同的线程上运行任务PerSession。我假设它正在使用线程池来处理请求。
所以我正在创建我的第一个Wix项目,我似乎在执行自定义操作时遇到问题.我不确定它是否包含在msi中,我不太确定我做错了什么.以下是我的Wix文件:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="ExactaDynamicManifest" Language="1033" Version="1.0.0.0" Manufacturer="Bastian Software Solutions" UpgradeCode="274ff2d9-e291-4706-a8db-ce80ccd91538">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine"/>
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate />
<Feature Id="ProductFeature" Title="ExactaDynamicManifest" Level="1">
<ComponentGroupRef Id="ExactaDynamicManifest"/>
</Feature>
<Icon Id="exacta.ico" SourceFile="icons\exacta.ico"/>
<Property Id="ARPPRODUCTICON" Value="exacta.ico" />
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="ExactaFolder" Name ="Exacta">
<Directory Id="INSTALLFOLDER" Name="ExactaExactaDynamicManifest" />
</Directory>
</Directory>
</Directory>
</Fragment>
<Fragment>
<CustomAction Id="InstallService" FileKey="ExactaDynamicManifest.exe" ExeCommand="install"/>
<InstallExecuteSequence>
<Custom Action="InstallService" After="InstallFinalize"/>
</InstallExecuteSequence>
</Fragment>
</Wix>
Run Code Online (Sandbox Code Playgroud)
最后一个片段包含我的自定义操作,我希望在将所有文件放入目录后,在命令行中执行以下操作:
ExactaDynamicManifest.exe install
Run Code Online (Sandbox Code Playgroud)
需要注意的一点是,exe实际上来自上面定义的 …
我目前正在开发一个WiX项目,我需要在项目中包含一些文件,但是要将它们从tfs中排除.我需要这样做,因为这些文件是在编译时自动生成的,但它们必须是要编译的项目的一部分.我认为我可以通过转发将它们从源代码控制中排除,File->Source Control->Advanced->Exclude <file> From Source Control但它似乎仍然包含在TFS中.
下面是我的项目的图片,看来visual studio正试图通过我排除的文件旁边的小红色图标来判断它们是否从tfs中排除.但是当我编译它时出错了,因为排除的文件是只读的,我可以通过查看源代码控制浏览器窗口清楚地看到它们已签入.

这是视觉工作室的问题还是我在这里做错了什么?
每当我试图对导致无限循环的对象矢量进行排序时,我就遇到了一个问题.我正在使用我传递给sort函数的自定义比较函数.
我能够通过在两个对象相等而不是true时返回false来解决问题但我并不完全理解解决方案.我认为这是因为我的比较功能违反了cplusplus.com上列出的规则:
比较函数对象,如果第一个参数位于其定义的特定严格弱顺序中的第二个参数之前,则返回两个与该范围中包含的相同类型的值,否则返回false.
任何人都可以提供更详细的解释吗?