小编jos*_*wer的帖子

nHibernate 2.0 - 映射复合id*和*多对一关系会导致"无效索引"错误

我有个问题.想象一下这个数据模型:

[Person] table has: PersonId, Name1  
[Tag] table has:  TagId, TagDescription  
[PersonTag] has: PersonId, TagId, IsActive
Run Code Online (Sandbox Code Playgroud)

由于[PersonTag]不仅仅是一个简单的多对多连接表,我在nHibernate中创建了所有三个实体(就像它们在数据模型中一样).PersonTag因此,需要一个复合ID,我已经映射到这样的类:

<composite-id name="PersonTagKey" class="PersonTagKey">
  <key-property name="PersonId"></key-property>
  <key-property name="TagId"></key-property>
</composite-id> 
Run Code Online (Sandbox Code Playgroud)

我想遍历对象图,并能够从检索到的对象中查看Person和对象.所以,我在对象上有属性来做,像这样映射:TagPersonTagPersonTag

<many-to-one name="Person" column="PersonId" lazy="proxy" cascade="none" class="Person"/>
<many-to-one name="Tag" column="TagId" lazy="proxy" cascade="none" class="Tag"/>
Run Code Online (Sandbox Code Playgroud)

当我尝试创建一个PersonTag对象并保存它时,我得到一个"此SqlParameterCollection的无效索引n,其中Count = n"错误.我知道这是因为我已经映射PersonIdTagId性能两次,一次为复合-ID,并曾经为许多一对一的关系.如果我不映射多对一对象,那么一切正常.

有没有办法让我能够在同一个nHibernate实体中建模的同一列中拥有复合ID和多对一关系?

nhibernate nhibernate-mapping

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

通过反射获取List <T>中的包含类型?

通过反思,有什么方法让我看一下通用List的包含类型,看看该集合的类型是什么?例如:

我有一组简单的业务对象,它们来自一个接口,如下所示:

public interface IEntityBase{}  

public class BusinessEntity : IEntityBase   
{
    public IList<string> SomeStrings {get; set;}       
    public IList<ChildBusinessEntity> ChildEntities { get; set;}
} 

public class ChildBusinessEntity : IEntityBase{}
Run Code Online (Sandbox Code Playgroud)

在我通过反射迭代BusinessEntity属性的情况下,有没有办法让我看看对象是否嵌套在从IEntityBase派生的那些列表中?

编码(严重)像这样:

foreach(PropertyInfo info in typeof(BusinessEntity).GetProperties())
{
  if(info.PropertyType is GenericIList &&
     TheNestedTypeInThisList.IsAssignableFrom(IEntityBase)
  {
    return true;
  }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我所听到的唯一选择是从该列表中取出第一个项目,然后查看其类型.任何更简单的方法(特别是因为我无法保证List不会为空)?

.net c# generics reflection

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

RESTful WCF服务在POST操作上返回"端点未找到"错误

我已经构建了一个通过SOAP和RESTly公开的WCF服务.所有SOAP操作都与广告一样有效.GETS/PUTS也可以,但是当我尝试对我的服务中的操作执行POST时,我收到以下错误:

"找不到端点"

IPersonEditServiceContract片段:

[OperationContract]
[WebInvoke(Method="POST", 
   UriTemplate="/persons", 
   RequestFormat=WebMessageFormat.Xml, 
   ResponseFormat=WebMessageFormat.Xml)]
SavePersonResponse SavePerson(SavePersonRequest request);


[OperationContract]
WebGet(UriTemplate = "/persons/{personId}",
   ResponseFormat = WebMessageFormat.Xml,
   BodyStyle = WebMessageBodyStyle.Bare,
   RequestFormat = WebMessageFormat.Xml)]
Person GetClaimantById(string personId);
Run Code Online (Sandbox Code Playgroud)

服务以这种方式配置:

<behaviors>
   <endpointBehaviors>
    <behavior name="restBehavior">
     <webHttp />
    </behavior>
   </endpointBehaviors>
</behaviors>
<services>
  <service>
    <endpoint address="" binding="basicHttpBinding" 
        name="DefaultEndpoint"
        bindingNamespace="http://mycompany.com/ServiceContracts"
        contract="IPersonEditServiceContract" />
     <endpoint 
         address="rest" binding="webHttpBinding"
         name="RESTEndpoint" 
         bindingNamespace="http://mycompany.com/ServiceContracts"
         contract="IPersonEditServiceContract" 
         behaviorConfiguration="restBehavior"/>
  </service>
</services>
Run Code Online (Sandbox Code Playgroud)

由于我可以对同一个端点执行其他RESTful操作,因此我不完全确定它为什么会给我这个半有用的错误.

想法?

.net rest wcf

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

麻烦在具有复合ID的类上使用nHibernate 2.0的Session.Get <T>

我遇到的问题(我认为)应该很简单,但找不到任何明确的信息.

在我有三个表的情况下,描述一个人可以拥有多个作业的域:

人 - 有PersonId,姓名
工作 - 有JobId,JobName
PersonJob - 有PersonId,JobId,YearsOfEmployment

注意:在我的对象模型中,我有表示每个表的实体.我有第三个实体代表人/工作关系,因为那里有有用的元数据(YearsOfEmployment),而不仅仅是一个简单的连接表.

所以,如果我知道PersonId和JobId,有没有一种简单的方法让我使用会话并返回一个匹配那些ID的对象?

或者,换一种方式,因为我已经知道主键是有一种脑死亡,简单的方法,我可以将SQL"SELECT YearsOfEmployment from PersonJob WHERE PersonId = 1 AND JobId = 1"转换为:

var keys = new {PersonId=1, JobId=2};
PersonJob obj = Session.Get<PersonJob>(keys);

顺便说一句:地图看起来像这样:

<class name="Person" table="dbo.Person" lazy="true">
  <id name="PersonId">
    <generator class="native"/>
  </id>
  <property name="Name"/>
</class>
<class name="Job" table="dbo.Job" lazy="true">
  <id name="JobId">
    <generator class="native"/>
  </id>
  <property name="JobName"/>
</class>
<class name="PersonJob" table="dbo.PersonJob" lazy="true">
  <composite-id>
    <key-property name="PersonId"></key-property>
    <key-property name="JobId"></key-property>
  </composite-id>
  <property name="YearsOfEmployment"/>
</class>
Run Code Online (Sandbox Code Playgroud)

nhibernate nhibernate-mapping

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

如何分发使用Team Foundation Server API的服务?

有许多使用TFS API创建工作项的很好的例子,它们都是作为VS 2008 SDK的一部分打包的.所以,想象一下,我创建了一个简单的Web服务,它可以获取一些信息,然后创建一个工作项.

一切都在本地运行得很好,但是如果我想在其他地方部署该Web服务呢?在本地,我只是参考:

1)Microsoft.TeamFoundation.Client
2)Microsoft.TeamFoundation.WorkItemTracking.Client

有没有人有幸在如果在没有安装Visual Studio或VS SDK的机器上使用这些库来部署库或服务?是否有某种TFS SDK可再发行组件可用?可能有一些许可原因吗?

顺便说一句,如果我只是将这些dll复制到Web服务器,我会收到以下错误:

System.InvalidProgramException:公共语言运行时检测到无效程序.

伊克.

提前致谢!

编辑: 有点值得注意,这个人有完全相同的问题,没有解决方案......

编辑: 感叹.谷歌/黑客攻击了三个小时,然后发布了这个,然后五分钟后发现了我认为的答案. 必须安装Team Explorer吗? 可验证?

最终编辑: 是的,就是这样.安装团队资源管理器,远离它......

tfs visual-studio-2008

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

在 pyspark 中积累数据帧的最有效方法是什么?

我有一个数据框(或者可以是任何 RDD),其中包含一个众所周知的模式中的数百万行,如下所示:

Key | FeatureA | FeatureB
--------------------------
U1  |        0 |         1
U2  |        1 |         1
Run Code Online (Sandbox Code Playgroud)

我需要从磁盘加载十几个其他数据集,这些数据集包含相同数量的键的不同功能。一些数据集多达十几列宽。想象:

Key | FeatureC | FeatureD |  FeatureE
-------------------------------------
U1  |        0 |        0 |         1

Key | FeatureF
--------------
U2  |        1
Run Code Online (Sandbox Code Playgroud)

感觉就像折叠或积累,我只想迭代所有数据集并返回如下内容:

Key | FeatureA | FeatureB | FeatureC | FeatureD | FeatureE | FeatureF 
---------------------------------------------------------------------
U1  |        0 |        1 |        0 |        0 |        1 |        0
U2  |        1 |        1 |        0 |        0 |        0 …
Run Code Online (Sandbox Code Playgroud)

python dataframe apache-spark pyspark

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

如何让Visual Studio中的TDD减少痛苦?

我最近成了一名TDD狂热者.解释这个概念并不困难.大多数人都尊重它背后的目的.但是,当我试图展示这个想法背后的实际过程时,最大的抱怨是:

"当我编写初始测试时,我讨厌Visual Studio intellisense如何尝试猜测我正在做什么.显然这是错误的,因为我还没有编写API.当我拥有时,它会让我脱离背景解决Intellisense猜错的所有事情."

不幸的是,经常出现:

"TDD(或Visual Studio)很糟糕"

它从来没有真正困扰过我(我只是删除它猜错的东西),但我看到了问题.其他人做了什么来解决这个问题?明显的答案是:

  1. 在编写测试时关闭intellisense,然后在编写API时将其重新打开.
  2. 用Notepad ++之类的东西写下你的测试,然后在你认为自己开心的时候复制到VS.
  3. 停止抱怨

PS我在SO(以及其他地方)的任何地方寻找这个问题所以如果我错过它,请随意标记为重复...好像你需要我的许可;-)

编辑:是的,我有Resharper,它真棒.

tdd visual-studio

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