我在让NHV与Fluent NHibernate合作时遇到了一些麻烦.我拥有的单元测试有一个应该失败的实体,最终会抛出一个ADO异常.我有以下方式配置NHV:
private static void Init()
{
_SessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(connectionString)
.ShowSql())
.Mappings(m =>
m.FluentMappings.AddFromAssemblyOf<SessionFactory>()
.ExportTo(pathToExportMappingsTo))
.ProxyFactoryFactory("NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu")
.ExposeConfiguration(ConfigureNhibernateValidator)
.BuildSessionFactory();
}
private static void ConfigureNhibernateValidator(Configuration config)
{
var nhvConfiguration = new NHibernate.Validator.Cfg.Loquacious.FluentConfiguration();
nhvConfiguration
.SetDefaultValidatorMode(ValidatorMode.OverrideAttributeWithExternal)
.Register(Assembly.Load("Business.Objects")
.ValidationDefinitions())
.IntegrateWithNHibernate
.RegisteringListeners();
ValidatorEngine validatorEngine = new ValidatorEngine();
validatorEngine.Configure(nhvConfiguration);
ValidatorInitializer.Initialize(config, validatorEngine);
}
Run Code Online (Sandbox Code Playgroud)
我现在已经多次查看过这个配置并搜索了互联网,试图找出这个有什么问题.我还查看了NHV源中提供的示例,但我无法弄清楚为什么我的单元测试不会抛出InvalidStateException.我有一个单元测试来验证应该失败的同一个实体,它通过验证引擎直接验证它,这是有效的.
有没有人看到上述配置有什么问题?
我正在使用NHibernate 3.1,NHibernate Validator 1.3和Fluent NHibernate 1.2.0.712
每当我试图对导致无限循环的对象矢量进行排序时,我就遇到了一个问题.我正在使用我传递给sort函数的自定义比较函数.
我能够通过在两个对象相等而不是true时返回false来解决问题但我并不完全理解解决方案.我认为这是因为我的比较功能违反了cplusplus.com上列出的规则:
比较函数对象,如果第一个参数位于其定义的特定严格弱顺序中的第二个参数之前,则返回两个与该范围中包含的相同类型的值,否则返回false.
任何人都可以提供更详细的解释吗?
我似乎对我用NHibernate映射的一个数据库视图有一个奇怪的问题.我正在为我映射的其中一个视图获取重复记录.我有以下视图对象
WorkDetailView
/ \
/ \
/ \
/ \
PickWorkDetailView PutWorkDetailView
Run Code Online (Sandbox Code Playgroud)
每个对象表示在数据库中,但两者有不同的看法PickWorkDetailView和PutWorkDetailView继承WorkDetailView,因为它们共享许多相同的字段.
如果我运行以下代码,我得到2个结果,但如果我在SQL Management Studio中运行实际的数据库视图,我得到1个结果.
List<WorkDetailView> workList = session.QueryOver<WorkDetailView>()
.List<WorkDetailView>().ToList();
Run Code Online (Sandbox Code Playgroud)
有趣的是,当我查看workList上面集合中的所有项目时,我看到一个WorkDetailView对象和一个PickWorkDetailView对象.另外,如果我查看NHibernate正在运行的查询,则会从所有3个视图(WorkDetailView,PickWorkDetailView和PutWorkDetailView)中选择问题.这根本听起来不对.如果需要,我可以发布xml映射或我的流畅映射.
我有一个ReportRequest对象定义为:
public class ReportRequest
{
public virtual Int32? Id { get; set; }
public virtual string Description { get; set; }
public virtual IList<ReportClient> ReportClients{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
和ReportClient定义为:
public class ReportClient
{
public virtual int? Id { get; set; }
public virtual long? ClientId { get; set; }
public virtual string Name { get; set; }
public virtual string EmailAddress { get; set; }
public virtual IList<ReportClient> ChildClients { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
ReportClient的映射:
public class ReportClientMap : ClassMap<ReportClient>
{
public …Run Code Online (Sandbox Code Playgroud) 我的设置:
Application.exe(Visual Studio 6.0 C++)
Component.dll(Visual Studio 2010 C#)
Application.exe使用Component.dll
我希望能够同时调试我的Visual Studio 6.0 C++应用程序和它使用的Visual Studio 2010 C#组件,但我不确定这是否可行.
我尝试从Visual Studio 6.0启动应用程序并附加到我的Visual Studio 2010组件解决方案中的该进程(Application.exe),但是当我转到附加到进程(Application.exe)时,它显示为灰色.我尝试切换Attach To:到Native但是这不允许我附加到这个过程.我的Application.exe仍然在窗口中显示为灰色.
似乎我无法Change Signature在Resharper(v6.1)中执行该选项.这是我第一次使用它,所以我不确定是否需要启用它.
每当我右键单击方法名称时,我只有2个选项. Refactor This...和Rename....
我希望能够更改签名,但我无法使用该选项.
有任何想法吗?
Visual Studio 2010(v10.0.40219.1 SP1Rel)
C#
以下是我尝试更改签名的方法.这是基类中的方法.我突出显示了方法名称(ConfirmPick)并右键单击它以尝试更改签名.
public ExactaResult ConfirmPick(Guid locationId, decimal quantityPicked, bool isFullContainer = false)
Run Code Online (Sandbox Code Playgroud) 有没有办法使用复合赋值运算符来实现这样的事情:
a = (a * 10) + b;
Run Code Online (Sandbox Code Playgroud)
最初我尝试了以下内容:
a *= 10 + b;
Run Code Online (Sandbox Code Playgroud)
但这相当于:
a = a * (10 + b)
Run Code Online (Sandbox Code Playgroud)
只是好奇.今天跑过这个.这不是功课.
我有一个我似乎无法弄清楚的指针问题.看起来我已经用这种方式使用指针了1000次,所以我不太清楚这里发生了什么.我有以下代码:
int iRetVal;
CycleCountOrder* cycleOrder = NULL;
CycleCountLineItem* cycleLine = NULL;
iRetVal = m_CycleCount.GetCCOrderLine(pOneLocation.szOrderNum[c], cycleOrder, cycleLine);
Run Code Online (Sandbox Code Playgroud)
每当我调用GetCCOrderLine时,我都会进入函数内部,并为指针cycleOrder和cycleLine分配有效值.当我走出函数GetCCOrderLine之外时,引用再次为NULL.下面的代码是如何定义GetCCOrderLine:
头文件
int GetCCOrderLine(CString szOrderLnitem, CycleCountOrder* cycleOrder, CycleCountLineItem* cycleCountLine);
Run Code Online (Sandbox Code Playgroud)
cpp文件
int CCycleCount::GetCCOrderLine(CString szOrderLnitem, CycleCountOrder* cycleOrder, CycleCountLineItem* cycleCountLine)
{
CString szCurrOrderLnitem;
for(int c = 0; c < m_Orders.GetCount(); c++)
{
CycleCountOrder* currentOrder = m_Orders[c];
for(int d = 0; d < currentOrder->m_LineItems.GetCount(); d++)
{
CycleCountLineItem* currentLine = currentOrder->m_LineItems[d];
szCurrOrderLnitem.Format("%s-%d-%d", currentOrder->szOrderNum, currentLine->nLnitemNum, currentLine->nSubitemNum);
if(szCurrOrderLnitem == szOrderLnitem)
{
cycleOrder = currentOrder;
cycleCountLine = currentLine;
return FUNC_OK;
}
} …Run Code Online (Sandbox Code Playgroud) 我的公司有多个站点,它们引用相同的DB和Core代码库.然后我们有一个管理数据的CMS.
在Core库中,我有一个Site类,它包含有关每个站点的一堆基本信息.这是我对它的流畅映射.
using Core.Model; // Where Site class exists
namespace Core.Repository.NHibernate.Mappings
{
public class SiteMapping : ClassMap<Site>
{
public SiteMapping()
{
Table("f_site");
Id(x => x.Id, "f_site_id").GeneratedBy.Identity();
Map(x => x.Domain, "domain_name").Not.Nullable();
}
}
}
Run Code Online (Sandbox Code Playgroud)
作为CMS的一部分,我们会记录谁编辑了什么以及何时编辑.但我想只在CMS中引用Log类和映射,而不是在我的核心代码中,因为人们只能通过CMS编辑信息.
这是我当前流向Log类的流程映射,它引用了Site类.
using Core.Model; // where Site class exists
using Cms.Model; // where Log and CmsUser classes exists
namespace Cms.Repository.NHibernate.Mappings
{
public class LogMapping : ClassMap<Log>
{
public LogMapping()
{
Table("f_log");
Id(x => x.Id, "f_log_id").GeneratedBy.Identity();
Map(x => x.Message, "message");
Map(x => x.LogType, "d_log_type_id").CustomType<LogType>();
Map(x => x.LogOperation, "d_log_operation_id").CustomType<LogOperation>(); …Run Code Online (Sandbox Code Playgroud) nhibernate nhibernate-mapping fluent-nhibernate fluent-nhibernate-mapping
我正在寻找一种转换XmlDocument为Dictionary<string, string>使用Linq 的好方法.
我的xml格式如下:
<config>
<field>value</field>
<field2>value2</field2>
</config>
Run Code Online (Sandbox Code Playgroud)
我想把它放到一个字典中,键值对看起来像这样:
字段,值字段2,值
2
我想我应该使用Linq这样做,但我不确定语法.
我想设置我的汇编文件版本如下:6.0.ddMMyy.build数字,但它似乎没有工作,我认为这是由版本号只接受某些值引起的.
例:
[assembly: AssemblyFileVersion("6.0.100213.1")]
Run Code Online (Sandbox Code Playgroud)
每次编译程序集时,都会产生以下版本号:
6.0.34677.1
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
我的数据库中有几个表是父子关系。例如:
CREATE TABLE [dbo].[cntnr_header]
(
[cntnr_id] [dbo].[uid] NOT NULL,
CONSTRAINT [pk_cntnr_header] PRIMARY KEY CLUSTERED ([cntnr_id] ASC),
);
CREATE TABLE [dbo].[cntnr_content]
(
[cntnr_content_id] [dbo].[uid] NOT NULL,
[cntnr_id] [dbo].[uid] NOT NULL,
CONSTRAINT [pk_cntnr_content]
PRIMARY KEY CLUSTERED ([cntnr_content_id] ASC),
CONSTRAINT [fk_cntnr_content_cntnr_header]
FOREIGN KEY ([cntnr_id])
REFERENCES [dbo].[cntnr_header] ([cntnr_id]),
);
Run Code Online (Sandbox Code Playgroud)
如您所见,当前cntnr_id在表中的外键上没有索引cntnr_content。我运行了调优向导,实际上我看到它建议为表cntnr_content_id和cntnr_id表都添加一个非聚集索引cntnr_content。我不太了解这一点,因为cntnr_content_id它已经是聚集索引。为什么会推荐这样的索引?
CREATE NONCLUSTERED INDEX [_dta_index_cntnr_content_7_821577965__K1_K2] ON [dbo].[cntnr_content]
(
[cntnr_content_id] ASC,
[cntnr_id] ASC
)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON …Run Code Online (Sandbox Code Playgroud) nhibernate ×4
c# ×3
c++ ×3
com ×1
foreign-keys ×1
indexing ×1
linq ×1
nuget ×1
pointers ×1
resharper ×1
sorting ×1
sql-server ×1
stdvector ×1
xml ×1