2016-07-23 5 views
0
내가 엔티티 프레임 워크 RC 2에 오류 "잘못된 열 이름을"얻을

은 아래에있는 내 기관 잘못된 열 이름 - RC2

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' 

는 availabl하지 ArticleId1 및 TagId1 열 이름이있다 테이블에 e. 몇 시간 동안 고생하고 있지만 여전히 해결책을 찾지 못했습니다. 당신은 필요하지 않습니다) 당신은 이미이 ArticleTagMap에서 특성을 제거, [ForeignKey(...)] 속성에서이 정보를 (또는) 및 마이그레이션 스크립트

2를 다시 작성 -

+0

어떻게 수정 했습니까? 버그처럼 보입니다. –

답변

-1

1) OnModelCreating에서 .HasForeignKey()을 제거하려고 :) 도와주세요 프로파일 러에서 SQL을 catch하는 방법. 생성 된 마이그레이션 스크립트 (또는 migrations/<DbContextName>DbModelSnapshot.cs 전체 모델의 파일)를 검사하여 EF가 모델을 정확하게 "이해"하는지 확인할 수 있습니다