小编Kev*_*ger的帖子

实体框架代码优先:按ID添加多对多关系

我有一个像这样定义的多对多关系:

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列表,那么将这些标签与帖子联系起来的最佳方式是什么?)

entity-framework ef-code-first

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

尝试将Web引用添加到WCF服务时出现HTTP 400 Bad Request错误

我一直在尝试将传统的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的跟踪建议后,我确​​定异常是 …

.net wcf wse3.0

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

\如果另一个实体与表同名,则无法将实体映射到表

我正在针对现有数据库进行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表之外,但是即使我明确地指定它,也会出现一些映射自动发生.

这种行为有什么解释,可以解决吗?

c# entity-framework ef-code-first

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

标签 统计

ef-code-first ×2

entity-framework ×2

.net ×1

c# ×1

wcf ×1

wse3.0 ×1