簡體   English   中英

EF7-RC2上的列名稱無效

[英]Invalid Column Name on EF7 - RC2

我在實體框架RC 2上收到錯誤“無效的列名稱”,以下是我的實體

public class Article : IEntityBase
    {       
       public Article()
        {
            TagMaps = new List<ArticleTagMap>();

        }
        public int Id { get; set; }

        [Required, MaxLength(100), MinLength(3)]
        public string Slug { get; set; }

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

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

        [MaxLength(255)]
        public string ShortDescription { get; set; }

        [MaxLength(255)]
        public string Metadata { get; set; }

        public virtual ICollection<ArticleTagMap> TagMaps { get; set; }

    }

public class Tag :IEntityBase 
    {
        public Tag()
        {
            TagMaps = new List<ArticleTagMap>();
        }

        public int Id { get; set; }

        [Required, MaxLength(100)]
        public string TagName { get; set; }

        public virtual ICollection<ArticleTagMap> TagMaps { get; set; }


    }

public class ArticleTagMap : IEntityBase
    {


        public int Id { get; set; }

        [Required]
        public int ArticleId { get; set; }
        [Required]
        public int TagId { get; set; }

        [ForeignKey("TagId")]
        public virtual Tag Tag { get; set; }

        [ForeignKey("ArticleId")]
        public virtual Article Article { get; set; }

    }

在DataContext上,我添加以下代碼

protected override void OnModelCreating(ModelBuilder modelBuilder)
 {
     modelBuilder.Entity<ArticleTagMap>()
                .HasOne(a => a.Tag)
                .WithMany(b => b.TagMaps)
                .HasForeignKey(c => c.TagId)
                .OnDelete(DeleteBehavior.Cascade);

            modelBuilder.Entity<ArticleTagMap>()
                .HasOne(a => a.Article)
                .WithMany(b => b.TagMaps)
                .HasForeignKey(c => c.ArticleId)
                .OnDelete(DeleteBehavior.Cascade);
 }

從SQL事件探查器,我捕獲生成的腳本

exec sp_executesql N'SELECT [a0].[Id], [a0].[ArticleId], [a0].[ArticleId1], [a0].[TagId], [a0].[TagId1]
FROM [ArticleTagMaps] AS [a0]
INNER JOIN (
    SELECT DISTINCT TOP(1) [a].[Id]
    FROM [Campaigns] AS [x]
    INNER JOIN [Articles] AS [x.Article] ON [x].[ArticleId] = [x.Article].[Id]
    INNER JOIN [Articles] AS [a] ON [x].[ArticleId] = [a].[Id]
    WHERE [x.Article].[Slug] = @__slug_0
    ORDER BY [a].[Id]
) AS [a1] ON [a0].[ArticleId1] = [a1].[Id]
ORDER BY [a1].[Id]',N'@__slug_0 nvarchar(4000)',@__slug_0=N'bantu-pekak-sanin'

表中沒有ArticleId1和TagId1列名。 我已經奮斗了幾個小時,仍然找不到任何解決方案。 請幫忙 :)

1)嘗試從OnModelCreating刪除.HasForeignKey() -您已經在[ForeignKey(...)]屬性中擁有此信息(或者,從ArticleTagMap刪除此屬性),然后重新創建遷移腳本

2)您不需要在事件探查器中捕獲SQL。 您可以檢查生成的遷移腳本(或帶有整個模型的migrations/<DbContextName>DbModelSnapshot.cs文件),以確保EF正確地“理解”了模型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM