我有一个像这样定义的多对多关系:
public class Post
{
//NOT SHOWN: Other properties
public virtual ICollection<Tag> Tags { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我看到的所有例子都会增加这样的多对多关系:
//Get the tag with ID of 1
var tag = context.Tags.Find(1);
// associate tag with ID of 1 with myPost
myPost.Tags.Add(tag);
Run Code Online (Sandbox Code Playgroud)
但是,如果我只知道要与帖子关联的标签的ID,这似乎是单调乏味/低效的.
理想情况下,我只想List<int> TagIds在我的Post实体上公开一个并且能够通过将Tag Ids添加到列表中来添加标签,但是我一直无法确定使用EF Code First是否可行.
结论:鉴于我只是想要关联的实体的ID,所以将项目添加到多对多关系的最佳方式是什么.(例如,如果我有一个标签ID列表,那么将这些标签与帖子联系起来的最佳方式是什么?)
我一直在尝试将传统的WSE 3 Web服务移植到WCF.由于保持与WSE 3客户端的向后兼容性是我的目标,因此我遵循了本文中的指导.
经过多次试验和错误,我可以从我的WSE 3客户端调用WCF服务.但是,我无法从Visual Studio 2005(安装了WSE 3)添加或更新此服务的Web引用.响应为"请求失败,HTTP状态为400:错误请求".我尝试使用wsewsdl3实用程序生成代理时遇到同样的错误.我可以使用VS 2008添加服务引用.
我尝试在Windows 7和Windows 2008 Server R2上的IIS 7.5中托管服务,结果相同.任何解决方案或故障排除建
以下是我的WCF服务的配置文件中的相关部分.
<system.serviceModel>
<services>
<service behaviorConfiguration="MyBehavior"
name="MyService">
<endpoint address="" binding="customBinding" bindingConfiguration="wseBinding"
contract="IMyService" />
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
</service>
</services>
<bindings>
<customBinding>
<binding name="wseBinding">
<security authenticationMode="UserNameOverTransport" />
<mtomMessageEncoding messageVersion="Soap11WSAddressingAugust2004" />
<httpsTransport/>
</binding>
</customBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="MyBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="MyCustomValidator" />
</serviceCredentials>
<serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="MyRoleProvider" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)
更新:在尝试了Paul的跟踪建议后,我确定异常是 …
我正在针对现有数据库进行EF Code First开发.由于我被传递了一个模式,并且一些表名称不理想,我想以不同于基础表的方式命名某些实体类,并在OnModelCreating中执行映射.
如果实体类名称与现有表名冲突,即使我在代码中重新映射它们,这似乎也不起作用.
鉴于这些(由此示例构成)实体类:
我试图在OnModelCreating中执行以下映射:
modelBuilder.Entity<Gadget>.ToTable("Sprocket");
modelBuilder.Entity<Widget>.ToTable("Gadget");
Run Code Online (Sandbox Code Playgroud)
在运行时,这会产生以下错误:
System.InvalidOperationException:实体类型'Widget'和'Gadget'不能共享表'Gadget',因为它们不在同一类型层次结构中,或者没有有效的一对一外键关系,它们之间具有匹配的主键.
这没有意义,因为我正在将Gadget实体映射到Gadget表之外,但是即使我明确地指定它,也会出现一些映射自动发生.
这种行为有什么解释,可以解决吗?