实体框架代码首先不能创建主键和外键关系

时间:2015-11-26 11:13:04

标签: entity-framework

我正在尝试在两个表之间创建关系,但不断收到以下错误:

  

属性' CallLogId'上的ForeignKeyAttribute在类型上   ' Ylp.Web.ParkingApi.DataLayer.Entities.ApiCallLogDetailEntity'不是   有效。导航属性' ApiCallLog'没找到了   依赖类型   ' Ylp.Web.ParkingApi.DataLayer.Entities.ApiCallLogDetailEntity&#39 ;.该   名称值应该是有效的导航属性名称。

DbContextMapping:

modelBuilder.Entity<ApiCallLogDetailEntity>()
    .HasRequired<ApiCallLogEntity>(p => p.ApiCallLog);

主要表格:

[Table("ApiCallLog")]
        public class ApiCallLogEntity
        {
            [Key, Column(Order = 0)]
            public string CallLogId { get; set; }

            [Key, Column(Order = 1)]
            public string UserId { get; set; }

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

            [Required]
            public DateTime LastUpdated { get; set; }

            [Required]
            public int Count { get; set; }

            public virtual ICollection<ApiCallLogDetailEntity> Details { get; set; }
        }

外国表:

[Table("ApiCallLogDetail")]
public class ApiCallLogDetailEntity
{
    [ForeignKey("ApiCallLog")]
    public string CallLogId { get; set; }

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

    [Required]
    public DateTime LastUpdated { get; set; }

    public ApiCallLogEntity ApiCallLog { get;}
}

1 个答案:

答案 0 :(得分:0)

外键必须引用父表的整个主键。在您的父表中,您有一个复合主键,其中包含CallLogIdUserId。该消息令人困惑,但这可能是错误的一部分。是否真的有必要在PK中包含UserId

另一个错误是你没有在依赖表中定义PK。如果PK上还需要UserId,请将其包含在从属表中,并使其成为FK的一部分。