Asp.net mvc EF代码第一个复合密钥链接

Asp.net mvc EF代码第一个复合密钥链接,asp.net-mvc,entity-framework,ef-code-first,entity-framework-4.1,composite-key,Asp.net Mvc,Entity Framework,Ef Code First,Entity Framework 4.1,Composite Key,当我尝试更改code first应用程序以适应多租户demads时,我基本上向所有表添加了额外的键列(并创建复合主键): 当EF尝试生成数据库时,我收到错误: *从表工作程序(CompanyID,ActivityId)到表活动(ActivityId,CompanyID)的外键约束“Activity\u ActActivityt”::映射不足:外键必须映射到参与概念端外键关联的某些AssociationSet或EntitySet* 考虑到每个用户都要选择一个活动,您能告诉我如何映射这两个表吗 谢谢

当我尝试更改code first应用程序以适应多租户demads时,我基本上向所有表添加了额外的键列(并创建复合主键):

当EF尝试生成数据库时,我收到错误:

*从表工作程序(CompanyID,ActivityId)到表活动(ActivityId,CompanyID)的外键约束“Activity\u ActActivityt”::映射不足:外键必须映射到参与概念端外键关联的某些AssociationSet或EntitySet*

考虑到每个用户都要选择一个活动,您能告诉我如何映射这两个表吗

谢谢,
tihi

我认为您必须使用数据注释明确设置外键映射(而不是依赖于约定),但是我不能完全确定这是否有效,因为您有FK与PK的重叠。但从理论上讲,它应该:


顺便说一句,今天下午早些时候我遇到了这个问题。我不是100%确定(仍然没有解决这个问题——我已经停止了工作),但我认为您可能需要包括一个导航属性。您好Justin,谢谢您的提示。它确实解决了我最初的问题。然而,新的问题马上出现了。因此,我想我将删除CompanyId作为键,并简单地将其用作“过滤器”字段,然后看看它是如何工作的。:)顺便说一句,您可以尝试使用fluentapi,因为它对您可以配置的内容具有更强的健壮性。它最终会在后台创建属性(大部分情况下),因此我不确定它是否有用。不过,只要您有工作代码,我就很高兴:)
    [Key, Column(Order = 1)] 
    public int CompanyID { get; set; }


public class Worker
{
     [Key, Column(Order = 0)] 
    public  int WorkerID{ get; set; }
     [Key, Column(Order = 1)] 
    public int CompanyID { get; set; }

    [Required]
    public string Name { get; set; }

    public virtual int ActivityId { get; set; }
    public virtual Activity SomeActivity { get; set; }

}

public class Activity
{
    [Key, Column(Order = 0)] 
    public int ActivityID { get; set; }
    [Key, Column(Order = 1)] 
    public int CompanyID { get; set; }

    [Required]
    [Display(Name = "Desc.")]
    public virtual string Description{ get; set; }
}
public class Worker
{
    [Key, Column(Order = 0)] 
    public  int WorkerID{ get; set; }
    [Key, Column(Order = 1)] 
    [ForeignKey("SomeActivity")]
    public int CompanyID { get; set; }

    [Required]
    public string Name { get; set; }

    [ForeignKey("SomeActivity")]
    public virtual int ActivityId { get; set; }
    public virtual Activity SomeActivity { get; set; }

}