首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Entity Framework6的数据标注中添加复合外键

如何在Entity Framework6的数据标注中添加复合外键
EN

Stack Overflow用户
提问于 2016-06-23 16:33:15
回答 3查看 1.1K关注 0票数 3

我正在与实体框架6的ASP.NET应用程序。我已经有数据库,我正在使用代码优先现有的数据库方法。

我是两个表,第二个表有Foriegn键和它自己的主键。我使用了列顺序,但仍然收到以下错误。我已经在网上搜索过了,尝试了不同的组合,但仍然出错。

代码语言:javascript
复制
'System.Data.Entity.ModelConfiguration.ModelValidationException' occurred in EntityFramework.dll but was not handled in user code Sys_Nav_FunctionHierarchyEntity_Sys_Nav_FunctionEntity_Source: : Multiplicity is not valid in Role  'Sys_Nav_FunctionHierarchyEntity_Sys_Nav_FunctionEntity_Source' in relationship 'Sys_Nav_FunctionHierarchyEntity_Sys_Nav_FunctionEntity'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be '*'.

A类

代码语言:javascript
复制
 [Table("Sys_Nav_Function")]
 public class Sys_Nav_FunctionEntity
 {
    public Sys_Nav_FunctionEntity()
    { }


    [Key]
    public int Function_ID { get; set; }

    [StringLength(250)]
    [Required(ErrorMessage = "Required Title")]
    [Display(Name = "Function Title")]
    public string FunctionName { get; set; }

    [Required(ErrorMessage = "Required Hierarchy Level")]
    [Display(Name = "Hierarchy Level")]
    public int Hierarchy_Level { get; set; }


    public Sys_Nav_FunctionHierarchyEntity Sys_Nav_FunctionHierarchyEntity { get; set; }

    public ICollection<Sys_Nav_FunctionInActionEntity> Sys_Nav_FunctionInActionEntity { get; set; }

    public ICollection<Sys_Nav_FunctionInControllerEntity> Sys_Nav_FunctionInControllerEntity { get; set; }
}

B类

代码语言:javascript
复制
 [Table("Sys_Nav_FunctionHierarchy")]
public class Sys_Nav_FunctionHierarchyEntity
{
    public Sys_Nav_FunctionHierarchyEntity()
    {

    }


    [Key, Column(Order =0)]
    public int Hierarchy_ID { get; set; }

    [ForeignKey("Sys_Nav_FunctionEntity"), Column(Order =1)]
    public int Function_ID { get; set; }

    public int Parent_Function_ID { get; set; }

    public Sys_Nav_FunctionEntity Sys_Nav_FunctionEntity { get; set; }
}

EN

回答 3

Stack Overflow用户

发布于 2016-06-23 16:45:05

尝尝这个

代码语言:javascript
复制
[Table("Sys_Nav_FunctionHierarchy")]
public class Sys_Nav_FunctionHierarchyEntity
{
    public Sys_Nav_FunctionHierarchyEntity()
    {

    }


    [Key, Column(Order =0)]
    public int Hierarchy_ID { get; set; }

    [ForeignKey("Function_ID"), Column(Order =1)]
    public int Function_ID { get; set; }

    public int Parent_Function_ID { get; set; }

    public Sys_Nav_FunctionEntity Sys_Nav_FunctionEntity { get; set; }
}

类B中的外键链接到表,而不是属性。

我相信上面的代码应该会给出正确的结果

票数 2
EN

Stack Overflow用户

发布于 2016-06-23 16:45:47

我认为应该在导航属性上设置ForeignKey属性:

代码语言:javascript
复制
[Table("Sys_Nav_FunctionHierarchy")]
public class Sys_Nav_FunctionHierarchyEntity
{
    //...
    public int Function_ID { get; set; }

    [ForeignKey("Function_ID")]
    public Sys_Nav_FunctionEntity Sys_Nav_FunctionEntity { get; set; }
}

如果Parent_Function_ID也是同一个表的外键,则可以采用相同的方法。

另外,在第一个类中:

代码语言:javascript
复制
public Sys_Nav_FunctionHierarchyEntity Sys_Nav_FunctionHierarchyEntity { get; set; }

应该是一个集合(如果我正确理解了这个问题)

票数 1
EN

Stack Overflow用户

发布于 2016-06-23 17:17:08

我已经删除了组合键,我尝试了不同的组合,但没有成功,但它的工作使用相同的键作为外键,也改变了在数据库中。

代码语言:javascript
复制
[Table("Sys_Nav_FunctionHierarchy")]
public class Sys_Nav_FunctionHierarchyEntity
{
    public Sys_Nav_FunctionHierarchyEntity()
    {

    }

    [Key, ForeignKey("Sys_Nav_FunctionEntity")]
    [Required]
    public int Function_ID { get; set; }

    public int Parent_Function_ID { get; set; }

    public Sys_Nav_FunctionEntity Sys_Nav_FunctionEntity { get; set; }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37986213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档