小编Myl*_*Rip的帖子

Fetch.Join()在Fluent NHibernate中不起作用

我在关系的一侧有以下映射覆盖:

public void Override(AutoMapping<ItemAsmtDetailDh> mapping)
{
    mapping.HasMany<WAsmtDetail>(x => x.WAsmtDetails).Inverse().AsBag().Cascade.AllDeleteOrphan().Access.PascalCaseField(Prefix.Underscore).Not.LazyLoad().Fetch.Join();
}
Run Code Online (Sandbox Code Playgroud)

在我的关系的另一边:

public void Override(AutoMapping<WAsmtDetail> mapping)
{
    mapping.References<ItemAsmtDetailDh>(x => x.ItemAsmtDetailDh).Not.Nullable().Not.LazyLoad().Fetch.Join();
}
Run Code Online (Sandbox Code Playgroud)

当我使用ShowSql选项时,我看到它仍然为WAsmtDetails发出单独的select语句,给我带来了可怕的"n + 1选择"问题.为什么".Not.LazyLoad().Fetch.Join()"被忽略了?

注意:我使用的是Fluent NHibernate 1.1 版,而不是版本2.1,因为新版本中存在错误.(有关错误的详细信息,请参阅我对此问题的回答.)我正在使用NHibernate 2.1.2.4000版.

nhibernate fluent-nhibernate

11
推荐指数
1
解决办法
4288
查看次数

如何实施聚合根的规则?

在搜索网络时,我遇到了Eric Evans的书中的一系列规则,这些规则应该针对聚合强制执行:

  1. 根实体具有全局标识,并且最终负责检查不变量
  2. 根实体具有全局身份.边界内的实体具有本地标识,仅在Aggregate中唯一.
  3. 除了根实体之外,聚合边界之外的任何内容都不能包含对内部任何内容的引用.根实体可以将对内部实体的引用传递给其他对象,但它们只能瞬时使用它们(在单个方法或块中).
  4. 只能使用数据库查询直接获取聚合根.其他一切都必须通过遍历来完成.
  5. Aggregate中的对象可以保存对其他Aggregate根的引用.
  6. 删除操作必须一次性删除聚合边界内的所有内容
  7. 当提交对Aggregate边界内的任何对象的更改时,必须满足整个Aggregate的所有不变量.

这一切似乎在理论上很好,但我看不出这些规则将被强制在现实世界中.

以规则3为例.一旦根实体为外部对象提供了对内部实体的引用,那么什么是使该外部对象保持超出单个方法或块的引用?

(如果执行此操作是特定于平台的,我将有兴趣了解如何在C#/ .NET/NHibernate环境中强制执行此操作.)

domain-driven-design

9
推荐指数
2
解决办法
1599
查看次数

具有 API 网关和微服务的 Blazor 服务器指南

到目前为止,我还没有找到有关将 Blazor Server(不是WebAssembly)与 API 网关和微服务结合使用的指南。讨论这些 Blazor 以及 API 网关和微服务的文章总是提到 Blazor WebAssembly (Wasm)。(是否假设 Blazor Server 应用程序不会使用微服务?此外,就其价值而言,选择 Blazor Server 而不是 Blazor WebAssembly 的原因是为了更好地保护知识产权。)

\n\n

无论如何...我想知道 Blazor Server 应用程序是否应该位于网关前面,通过网关将其内部 API 调用发送到网关后面的微服务,例如 \xe2\x80\xa6

\n\n

[浏览器] ----(SignalR)--- [Blazor 服务器应用程序] ----(https)---- [API 网关] ----(http)---- [微服务]

\n\n

或者将应用程序放在网关后面,让 SignalR 连接隧道通过网关,这样更有意义吗\xe2\x80\xa6

\n\n

[浏览器] ----(SignalR)---- [API 网关] ----(SignalR)---- [Blazor 服务器应用程序] ----(http)---- [微服务]

\n\n

请记住在建立 SignalR 连接之前应用程序在浏览器中的初始加载。需要单独处理吗?它会影响上面给出的选项的选择吗?我缺少更好的解决方案吗?

\n

architecture microservices api-gateway blazor blazor-server-side

9
推荐指数
1
解决办法
2596
查看次数

当我从不执行session.Save时,为什么NHibernate会保存对象?

我正在使用NHibernate和Fluent NHibernate.

我有代码,我开始一个事务,然后我进入一个创建几个对象的循环.对于每个对象,我检查某些条件.如果满足这些条件,则在对象上执行session.SaveOrUpdate().在循环结束时,我发出一个提交事务.

我在session.SaveOrUpdate命令上设置了断点,证明它永远不会到达(因为循环中的任何对象都没有满足条件). 然而,当事务提交时,对象被保存!

我正在使用AuditInterceptor并在OnSave方法中设置了断点.它被调用,但堆栈跟踪仅追溯到提交事务的语句.

此时没有任何类型的对象已经对它们执行了SaveOrUpdate,因此级联不能解释它.

为什么NHibernate会保存这些对象?

nhibernate fluent-nhibernate

8
推荐指数
2
解决办法
4967
查看次数

使用值转换器绑定到Silverlight 4中的FontWeight

我想比较各种属性的两个版本,如果它不等于另一个,则加粗其中一个.由于SL4不支持MultiBinding,我将FontWeight绑定到".".以便将整个数据上下文传递给转换器.然后,我使用converter参数指定要在转换器中比较的字段.到目前为止,这么好......不匹配的值是粗体.

问题是粗体属性绑定到可以编辑的文本框.编辑该值时,我希望"重新激活"转换器,以便根据值设置字体粗细.这不会发生.如何实现这一目标?

注意:我已经为相关的类和属性实现了INotifyPropertyChanged.更改值后切换到下一个字段会导致PropertyChanged事件触发,但在我实际移动到另一个记录然后返回到已更改的记录之前,字体权重不会更新.

(我也尝试使用Mode = TwoWay来查看是否可以解决问题.但是,当你绑定到"."时,不能使用TwoWay绑定.)

silverlight xaml binding ivalueconverter

5
推荐指数
1
解决办法
1551
查看次数

提交操作失败 - 在SubmitChanges()上使用Silverlight 4从RIA服务获取NotFound

我正在使用SL4和RIA Services构建基于Silverlight业务应用程序模板的新解决方案.由于我还在开发,我只是使用localhost.

我试图通过在关联(组合)实体中进行单个更改并调用SubmitChanges来测试SubmitChanges功能.我在UpdateService中的入口点的DomainService中有一个断点.断点被击中,一切看起来都没问题.此时,我实际上没有Update方法做任何事情 - 它只是返回.在客户端回调中,我检查SubmitOperation对象是否有错误.它报告:

Submit operation failed.  The remote server returned an error: NotFound.
Run Code Online (Sandbox Code Playgroud)

到目前为止,我还没有找到未找到的东西.

我尝试使用Fiddler(以及WCF二进制插件),据我所知,请求看起来不错,但根据Fiddler的说法:

ReadResponse() failed: The server did not return a response for this request. 
Run Code Online (Sandbox Code Playgroud)

嗯......那可能不对,因为我的回调断点被击中了.(这就是我收到NotFound错误消息的方法.)

我还尝试使用以下内容编辑我的web.config文件:

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  <behaviors>
    <serviceBehaviors>
      <behavior name="RIAServiceBehavior">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="True" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)

这没有提供任何新信息.我开始没有关于如何追踪"真实"问题的想法.有任何想法吗??

silverlight silverlight-4.0 wcf-ria-services

4
推荐指数
1
解决办法
4737
查看次数

将 CsvHelper 与流一起使用

我正在尝试使用 CsvHelper 读取 CSV 文件并从中创建数据表。第一行将是提供列名的标题记录,但除此之外,文件的结构是未知的。如果我使用以下代码(取自 CsvHelper 的作者的示例),它就可以工作。

using (var reader = new StreamReader("path\\to\\file.csv"))
using (var csv = new CsvReader(reader))
{
    // Do any configuration to `CsvReader` before creating CsvDataReader.
    using (var dr = new CsvDataReader(csv))
    {        
        var dt = new DataTable();
        dt.Load(dr);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我为 StreamReader 使用备用构造函数,该构造函数将 Stream 作为参数而不是文件路径,那么 CsvDataReader 的创建将失败并显示“不支持同步读取”的错误消息。

我尝试了 CsvHelper 的其他一些方法来尝试以不同的方式处理数据,但是每当通过传入 Stream 而不是文件路径来创建 StreamReader 时,我都会遇到相同的错误。我开始怀疑真正的问题在于 StreamReader 的实现还是 CsvHelper。在我的情况下(Blazor Server 应用程序),传入 Stream 更有意义。有任何想法吗?

编辑:

我相信 David Specht 是正确的,因为我使用的特定流有一些独特之处。在进一步的测试中,我发现一些字符串确实有效。在出现错误的情况下,我使用 IFileListEntry.Data 流接口从 Steve Sanderson 的 BlazorInputFile 组件(在 GitHub …

csv stream streamreader csvhelper blazor

2
推荐指数
1
解决办法
3107
查看次数

无法在Enterprise Architect中获取表信息 - MySQL

我正在使用Sparx Enterprise Architect 9.2版使用ODBC连接从MySQL数据库导入数据库模式.当我使用ODBC数据源管理器(Windows 7)测试ODBC连接时,连接测试成功.我正在使用MySQL ODBC 5.1驱动程序.

在Enterprise Architect中,当我尝试使用此ODBC连接导入架构时,我收到一条消息,说"无法获取表信息".

我错过了什么吗?有任何想法吗?

mysql odbc enterprise-architect

1
推荐指数
1
解决办法
6324
查看次数