我有个问题.想象一下这个数据模型:
[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"错误.我知道这是因为我已经映射PersonId和TagId性能两次,一次为复合-ID,并曾经为许多一对一的关系.如果我不映射多对一对象,那么一切正常.
有没有办法让我能够在同一个nHibernate实体中建模的同一列中拥有复合ID和多对一关系?
通过反思,有什么方法让我看一下通用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不会为空)?
我已经构建了一个通过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操作,因此我不完全确定它为什么会给我这个半有用的错误.
想法?
我遇到的问题(我认为)应该很简单,但找不到任何明确的信息.
在我有三个表的情况下,描述一个人可以拥有多个作业的域:
人 - 有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) 有许多使用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吗? 可验证?
最终编辑: 是的,就是这样.安装团队资源管理器,远离它......
我有一个数据框(或者可以是任何 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) 我最近成了一名TDD狂热者.解释这个概念并不困难.大多数人都尊重它背后的目的.但是,当我试图展示这个想法背后的实际过程时,最大的抱怨是:
"当我编写初始测试时,我讨厌Visual Studio intellisense如何尝试猜测我正在做什么.显然这是错误的,因为我还没有编写API.当我拥有时,它会让我脱离背景解决Intellisense猜错的所有事情."
不幸的是,经常出现:
"TDD(或Visual Studio)很糟糕"
它从来没有真正困扰过我(我只是删除它猜错的东西),但我看到了问题.其他人做了什么来解决这个问题?明显的答案是:
PS我在SO(以及其他地方)的任何地方寻找这个问题所以如果我错过它,请随意标记为重复...好像你需要我的许可;-)
编辑:是的,我有Resharper,它真棒.
.net ×2
nhibernate ×2
apache-spark ×1
c# ×1
dataframe ×1
generics ×1
pyspark ×1
python ×1
reflection ×1
rest ×1
tdd ×1
tfs ×1
wcf ×1