无法确定复合主键排序..但是排序就在那里

时间:2015-10-21 18:40:11

标签: c# entity-framework

我在运行时收到此错误:

无法确定类型“X.Application.Models.ItemService”的复合主键排序。使用ColumnAttribute ...

但我确实有复合主键的排序设置!

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace X.Application.Models
{
    public class ItemService
    {
        [Key]
        [Column(Order = 0)]
        [ForeignKey("Item")]
        public int ItemId { get; set; }

        [Key]
        [Column(Order = 1)]
        [ForeignKey("Service")]
        public int ServiceId { get; set; }

        [Required]
        public virtual Item Item { get; set; }

        [Required]
        public virtual Service Service { get; set; }
    }
}

我正在使用EntityFramework 6.1.3。我应该在哪里看到什么想法?

3 个答案:

答案 0 :(得分:1)

我也遇到了这个问题,发现了一个不同的原因 - 我正在分享解决方案以防万一其他人受益。

我的解决方案中的一个项目是针对.NET 4.5.2但是当我查看引用时,我必须使用.Net 4.0版本;所有其他项目都针对.NET 4.5.2和适当的452版EF。在构建之后,EF的不匹配版本被放在输出目录中,我的应用程序无法正常工作。

当我更新项目(和nuget的packages.config)以引用EF的452版本时,问题就消失了。

答案 1 :(得分:0)

我修好了。

ItemService 引用的其他两个实体,服务,返回 ItemService ,集合属性称为 ItemServices

在我删除了这两个属性之后,这些属性是多对多关系的一部分,我不需要实际进入模型,但错误就消失了。

public class Service
{
    [Key]
    public int ServicId { get; set; }

    // I deleted this line
    public virtual List<ItemService> ItemServices { get; set; }

    // etc...
}

public class Item
{
    [Key]
    public int ItemId { get; set; }

    // I deleted this line too
    public virtual List<ItemService> ItemServices { get; set; }

    // etc...
}

感谢大家的投入。

答案 2 :(得分:0)

当.NET 4.5项目意外地从4.0 nuget包子文件夹引用了EntityFramework.dll时,我收到此错误。简单的软件包重新安装将解决这个问题。