小编Fir*_*iro的帖子

在lambda中捕获时,C#Struct实例行为会发生变化

我已经解决了这个问题,但我正在试图找出它的工作原理.基本上,我使用foreach循环遍历结构列表.如果我在调用struct的方法之前包含引用当前结构的LINQ语句,则该方法无法修改结构的成员.无论是否甚至调用LINQ语句,都会发生这种情况.我能够通过将我正在寻找的值分配给变量并在LINQ中使用它来解决这个问题,但我想知道是什么导致了这一点.这是我创建的一个例子.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WeirdnessExample
{
    public struct RawData
    {
        private int id;

        public int ID
        {
            get{ return id;}
            set { id = value; }
        }

        public void AssignID(int newID)
        {
            id = newID;
        }
    }

    public class ProcessedData
    {
        public int ID { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            List<ProcessedData> processedRecords = new List<ProcessedData>();
            processedRecords.Add(new ProcessedData()
            {
                ID = 1
            });


            List<RawData> rawRecords = new List<RawData>(); …
Run Code Online (Sandbox Code Playgroud)

c# struct

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

NHibernate对象引用未保存的瞬态实例,在刷新之前保存瞬态实例

我正在尝试保存一个复杂的对象,里面有许多引用的元素,它在大多数时候都能正常工作.
但是在某些情况下我们得到以下例外,

object引用未保存的瞬态实例 - 在刷新之前保存瞬态实例,或者将属性的级联操作设置为使其自动保存的内容.类型:Namespace.Core.Client.ClientDetails,Entity:Namespace.Core.Client.ClientDetails

问题是,我的复杂对象中有大约12个ClientDetails元素,我们正试图保存.有没有办法识别哪个对象实例导致了这个问题?通过NHibernate日志记录或其他方式?我的代码示例用于保存如下,

_repository.Save<SuperParent>(obj);
_repository.Flush();
Run Code Online (Sandbox Code Playgroud)

请注意,当我将Nhibernate show_sql设置为true时,我能够看到正确生成的所有查询,但是当调用flush时,抛出异常.

请帮助解决问题.

c# nhibernate

16
推荐指数
1
解决办法
3万
查看次数

MS实体框架VS NHibernate及其派生的贡献(FluentNHibernate,Linq for NHibernate)

我刚刚阅读了有关Entity Framework 4(实际上是版本2)的这篇文章.

实体框架似乎比其首次发布提供了巨大的改进.因此,我从来没有在任何项目中使用EF,因为我觉得EF与NHibernate相比还不够成熟.

NHibernate及其目前对FluentNHibernateLinq for NHibernate的贡献由Ayende Rahien提供

我的感觉是,当NHibernate的第二版出现时,微软只是试图获得有利于NHibernate的地形.不过,我的担忧是以下(不是特别有序):

  • EF4往往不那么XML冗长吗?
  • EF4是否与SQL Server以外的基础数据存储兼容?
  • 使用EF4代替FluentNHibernate或NHibernate本身有什么好处?

NHibernate是一个很棒的工具,我想每个人都同意.由于其前身Hibernate,我们可以轻松找到文档和教程以及示例应用程序以熟悉它.FluentNHibernate不是这种情况.特别是根据我正在进行的项目,我要求我进一步调查NHibernate及其选项(例如FluentNHibernate),以便记录NHibernate和FluentNHibernate技术的使用规则和最佳实践.因此,作为一名C风格的开发人员被VB34戴上手铐,我无法在VB.NET中找到所提供示例的语法等效,尽管我已经到目前为止.

我相信NHibernate是最好的选择,但作为一名软件顾问,我不能(不想)错过重要的技术变革,改进和发展.

尽管我读到了关于EF1的不好评论,但EF4看起来非常有前景.您对NHibernate和Entity Framework途径的看法是什么?至于我,我对所有的阅读都感到困惑.我需要你把头伸出水面.

谢谢大家!

c# vb.net nhibernate entity-framework fluent-nhibernate

13
推荐指数
2
解决办法
3544
查看次数

Nhibernate:处理ITransaction异常,以便新事务可以继续使用相同的ISession

我有一个包含10个数据对象的列表,我希望使用NHibernate插入/更新到数据库.如果一个抛出异常(比如一个主键违规),我想仍然插入/更新另一个9.我将每个对象操作转换为它自己的原子事务,并在有异常时回滚事务.问题是如果事务确实导致异常并被回滚,那么在下一个事务中,Nhibernate会在Nexus.Data.PortfolioCorporateEntity条目中抱错:null id (在发生异常后不要刷新会话)

我的主要计划很简单.它从sessionfactory创建会话,创建数据访问层,对数据对象执行一些操作,然后尝试将这些数据对象持久保存到数据库.

    sessionsManager = new NHibernateSessionManager();
        session = sessionsManager.GetSession();
        DALC = new NHibernateDataProvider(session);

        …

        foreach (var pce in pces)
        {
            try
            {
                DALC.UpdateOrAddObject<PortfolioCorporateEntity>(pce);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Could not add Corporate Entity ID " + pce.CorporateEntity.CorporateEntityID.ToString());
            }

        }
Run Code Online (Sandbox Code Playgroud)

这是我的Nhibernate数据访问层中的updateOrAdd过程,对10个对象称为10次.

public void UpdateOrAddObject<T>(T workObject) 
{ 
    using (ITransaction tx = mSession.BeginTransaction) { 
        try { 
            mSession.SaveOrUpdate(workObject); 
            mSession.Flush(); 
            tx.Commit(); 
        } 
        catch (Exception ex) { 
            tx.Rollback(); 
            throw;
        } 
    } 
} 
Run Code Online (Sandbox Code Playgroud)

为了清楚说明,会话由调用程序实例化并传递给数据访问层对象,其构造函数如下所示.

public NHibernateDataProvider(ISession session) 
{ 
    mSession = session; 
} 
Run Code Online (Sandbox Code Playgroud)

除了异常之外,它工作正常,它表示不会在异常后刷新会话.我不确定为什么 - 事务很好地回滚,数据库应该准备接受另一个事务没有?我究竟做错了什么?

nhibernate

11
推荐指数
2
解决办法
4636
查看次数

NHibernate Linq提供者和take()skip()以及渴望获取

我在NHibernate 3.2和SQLite提供程序中有这个简单的linq查询:

var all = (from book in Session.Query<Book>() select book)
    .Skip(15)
    .Take(15)                
    .ToList();
Run Code Online (Sandbox Code Playgroud)

这个查询正确地返回了15个实体,但是当我尝试用FetchMany急切加载依赖集合时,如下所示:

var all = (from book in Session.Query<Book>() select book)
    .FetchMany(books => books.Authors)
    .Skip(15)
    .Take(15)                
    .ToList();
Run Code Online (Sandbox Code Playgroud)

我只返回了11个实体.这是一个我错过的错误吗?

这是生成的SQL查询

select
     book0_.Id as Id2_0_,
     author2_.Id as Id0_1_,
     book0_.Title as Title2_0_,
     book0_.Sort as Sort2_0_,
     book0_.TimeStamp as TimeStamp2_0_,
     book0_.PubDate as PubDate2_0_,
     book0_.Series_Index as Series6_2_0_,
     book0_.Author_Sort as Author7_2_0_,
     book0_.Isbn as Isbn2_0_,
     book0_.Lccn as Lccn2_0_,
     book0_.Path as Path2_0_,
     book0_.Flags as Flags2_0_,
     book0_.Uuid as Uuid2_0_,
     book0_.Has_Cover as Has13_2_0_,
     book0_.Last_Modified as Last14_2_0_,
     author2_.Name as …
Run Code Online (Sandbox Code Playgroud)

linq nhibernate

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

如何将ClosedXML中的货币格式化为数字

我们使用ClosedXML将数据表对象转换为Excel电子表格,以便呈现给用户.只需将所有数据库值(来自NHibernate)分配给字符串然后按如下方式格式化它们即可构建DataTable对象:

  //formatting
EstimatedCost = Currency.SafeToString(Currency.Create(n.EstimatedCost)),
Run Code Online (Sandbox Code Playgroud)

然后,我们将列类型设置为属性类型,即在所有情况下都为String.

在输出Excel工作表中会发生什么,因为该列设置为货币但具有数字作为文本警告,然后它将无法正确排序.

我的问题是,因为我们将所有数据构建到DataTable中,所以我没有机会正确地装饰ClosedXML列.有没有一种快速的方法可以做到这一点,我没想到?

public const string ExcelDataType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml";

public static MemoryStream GenerateExcelFileFromData(IEnumerable<KeyValuePair<string, DataTable>> tabs, int colWidth = 100)
{
  var workbook = new XLWorkbook { ColumnWidth = colWidth };
  foreach (var enumerable in tabs)
  {
    workbook.Worksheets.Add(enumerable.Value, enumerable.Key);
  }
Run Code Online (Sandbox Code Playgroud)

...

 public static DataTable ConvertToDataTable<T>(IEnumerable<T> varlist, List<string> excludedColumns, bool titleizeColumn = false)
 {
   var dtReturn = new DataTable();

   // column names 
   PropertyInfo[] oProps = null;

   if (varlist == null) return dtReturn;

    foreach (T rec in varlist) …
Run Code Online (Sandbox Code Playgroud)

c# excel

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

FluentNHibernate或端口到NHibernate的代码映射

我有几个项目使用NH和FNH生成映射(一些Fluent一些Automapped).我仍然需要一些bug和缺少的功能,但似乎FNH可能因为集成到NHibernate中的代码映射而死亡.

问题:有助于FNH或将映射迁移到代码映射或confORM并修复问题/实现功能吗?

nhibernate nhibernate-mapping fluent-nhibernate nhibernate-mapping-by-code fluent-nhibernate-mapping

7
推荐指数
2
解决办法
2351
查看次数

在.net中实现ApplicationDomain-boundary的回调

我使用Applicationdomain动态加载一个DLL,以便在nessesary时卸载.如果加载的dll中的任务终止,那么我无法工作的是来自创建的Appdomain的回调方法.

到目前为止我有什么

public interface IBootStrapper
{
    void AsyncStart();
    void StopAndWaitForCompletion();

    event EventHandler TerminatedItself;
}
Run Code Online (Sandbox Code Playgroud)

和"初学者"方面

private static Procedure CreateDomainAndStartExecuting()
{
  AppDomain domain = AppDomain.CreateDomain("foo", null, CODEPATH, string.Empty, true);
  IBootStrapper strapper = (IBootStrapper)domain.CreateInstanceAndUnwrap(DYNAMIC_ASSEMBLY_NAME, CLASSNAME);
  strapper.ClosedItself += OnClosedItself;
  strapper.AsyncStart();

  return delegate
  {
      strapper.StopAndWaitForCompletion();
      AppDomain.Unload(domain);
  };
}
Run Code Online (Sandbox Code Playgroud)

这导致程序集未找到异常,因为OnClosedItself()是一个只有Starter知道的类型的方法,它在appdomain中不存在.

如果我将OnClosedItself作为委托包装在一个可序列化的类中,它就是一样的.

有什么建议?

编辑:我正在尝试做的是建立一个自我更新的任务.因此我创建了一个启动器,如果有新版本可以停止并重新创建任务.但是如果任务从其他地方停止,它也应该通知启动器终止.

//从问题中删除了大量临时代码

编辑2:哈普洛指出我正确的方向.我能够用信号量实现回调.

.net c# applicationdomain

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

在datagridview虚拟模式下,更新RowCount会导致所有行都触发CellValueNeeded

我正在尝试实现datagridview的虚拟模式,但是当我将RowCount设置为某个数字(以显示滚动条)时,网格希望一次拥有所有行,而不仅仅是显示行。

DataGridView grid = new ...;

grid.VirtualMode = true;
grid.CellValueNeeded += OnCellValueNeeded;
grid.RowCount = dataprovider.GetFullCount();
Run Code Online (Sandbox Code Playgroud)

如何告诉网格仅请求显示的行?

.net c# datagridview winforms

5
推荐指数
3
解决办法
6385
查看次数

在Windows 64中javaw.exe进程消耗更多内存吗?

我从Windows 7(32位)切换到Windows 7(64位),因为我为2 GB添加了4 Gb RAM.现在,当我跑步的时候Eclipse Juno EE.在Windows任务管理器中,我看到该进程javaw.exe正在吃~380 Mb RAM,我之前没有看到过这种情况,当时我使用的是32位操作系统.我甚至没有尝试过任何项目的午餐.我写了这段代码:

public static void main(String[] args) {
    Runtime runtime = Runtime.getRuntime(); 
    System.out.println(runtime.maxMemory());
}
Run Code Online (Sandbox Code Playgroud)

它表明,对我来说JVM is allocated 1 338 507 264 bytes.

这意味着当我运行项目时,这个过程可能消耗高达1.3 Gb Ram?

将来我有什么问题吗?

java eclipse windows 64-bit jvm

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

流畅的Nhibernate复合键映射

我试图在很长一段时间内弄清楚这个问题.我有一个hacky方式来使它工作.

我只想知道在Fluent NHibernate映射中是否可行.

假设我有两个表例如:

Table ComissionLevel
{
    Year,
    ComissionLevelID,

    ... other properties ....
}
primary key (Year,ComissionLevelID)

Table ClientCommission
{
    Year,
    ClientID,
    CommissionLevelID_1,
    CommissionLevelID_2,

    ... other properties ...
}
primary key (Year,ClientID)
foreign key CommissionLevel1 (Year,CommissionLevelID_1)
foreign key CommissionLevel2 (Year,CommissionLevelID_2)
Run Code Online (Sandbox Code Playgroud)

目前我的映射如下:

public ComissionLevelMap()
{
  Schema("XXXX");
  Table("ComissionLevel");
  LazyLoad();
  CompositeId()
    .KeyProperty(x => x.Year, set => {
        set.ColumnName("Year");
        set.Access.Property(); } )
    .KeyProperty(x => x.CommissionLevelID, set => {
        set.ColumnName("CommissionLevelID");
        set.Length(10);
        set.Access.Property(); } );

  HasMany<ClientCommission>(x => x.ClientCommissions)
    .Access.Property()
    .AsSet()
    .Cascade.AllDeleteOrphan()
    .LazyLoad()
    .Inverse()
    .Generic()
    .KeyColumns.Add("Year", mapping …
Run Code Online (Sandbox Code Playgroud)

nhibernate fluent-nhibernate fluent-nhibernate-mapping

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

如何在流畅的nhibernate中使用分页查询

我想在流畅的nHibernate中使用以下查询:

_dataContext.Products
    .Where(filterExpression)
    .OrderBy(sortExpression + " " + sortDirection)
    .Skip(pageIndex * pageSize)
    .Take(pageSize);
Run Code Online (Sandbox Code Playgroud)

pagination fluent-nhibernate

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

HibernateSystemException:未知实体:org.hibernate.collection.PersistentSet;

我的目标是实现删除所有建议,然后插入新建议.(任何在线示例都会有很大帮助.

hbm映射如下:

<set name="recommendations" table="PRD_PRODUCT_RECOMMENDATION" 
inverse="true" lazy="true" batch-size="25" fetch="select" cascade="save-update, delete">
 <cache usage="nonstrict-read-write"/>   
  <key column="productguid" not-null="true"/>
  <one-to-many class="com.quinstreet.persistence.productCatalogue.ProductRecommendationDBVO" />
</set>
Run Code Online (Sandbox Code Playgroud)

我使用以下代码删除建议:

     ProductDBVO dbvo =((ProductImpl)product).getProductDBVO();
     Set<ProductRecommendationDBVO> recommendations= dbvo.getRecommendations(); 
     dbvo.getRecommendations().remove(recommendations);
      getHibernateTemplate().saveOrUpdate(recommendations);
getSession().flush();
      getSession().refresh(((ProductImpl)product).getProductDBVO());
Run Code Online (Sandbox Code Playgroud)

并得到错误:

org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity:    org.hibernate.collection.PersistentSet; nested exception is org.hibernate.MappingException: Unknown entity: org.hibernate.collection.PersistentSet
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:659)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:378)
at org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:791)
at org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:787)
at com.quinstreet.persistence.product.ProductDAOHibImpl.deleteRecommendations(ProductDAOHibImpl.java:2564)
at com.quinstreet.service.product.ProductServiceImpl.updateCatalogue(ProductServiceImpl.java:1827)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:301)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy36.updateCatalogue(Unknown …
Run Code Online (Sandbox Code Playgroud)

hibernate

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