2017-08-15 18 views
1

最近私のテーブルから列ConversationIdが削除されました。私は私のサービスをデバッグするために開始し、私はエラーを取得しています保存しようとすると:Entity Frameworkコアがまだ古い列を取得しています

Invalid column name 'ConversationId'.

コード:

public class AstootContext : DbContext 
{ 
    public AstootContext(DbContextOptions<AstootContext> options) 
     : base(options) 
    { } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
    } 

    public DbSet<ServiceRequest> ServiceRequests { get; set; } 
} 

そして、私のエンティティは次のようになります。

public class ServiceRequest 
{ 
    public int Id { get; set; } 
    public int SenderUserId { get; set; } 
    public int PriceTypeId { get; set; } 
    public decimal Price { get; set; } 
    public bool IsAccepted { get; set; } 
    public DateTime Created { get; set; } 
    public int MessageId { get; set; } 
} 

た全ての参考にConversationIdがコードから削除されましたが、私は再構築しましたが、まだこのエラーが発生しており、理由を理解できません。

enter image description here

は私が削除したり、私はこれを更新するために実行する必要が何かする必要がある秘密のキャッシュがあります:あなたは何ConversationIdはありません見ることができるよう

これは私のSQL Serverテーブルのですか?

+0

私はあなたが私は現在移行を使用していない変更された列 –

+0

@HaHoangを更新するために、再度migrations' '実行しようとすることができると思います私のDBは私の外部キー構造を反映していません –

+0

'public ICollection のようなコレクションナビゲーションプロパティを持つ' Conversation'というエンティティがあるように聞こえます。セット; } '、そうですか? –

答えて

3

EFコアはコードベースのORMです。ここで最も重要なのはM - Mapperです。実際のデータベース構造は重要ではありません。重要なのは、EF *があなたのコード・モデル(エンティティ・クラスとそのプロパティ、データ注釈、流暢な構成、および慣習と組み合わせたもの)に基づいていると考えることです。

したがって、問題はコードに起因するはずです。 明示的なプロパティを削除したので、それはshadow propertyによって引き起こされるはずです。ドキュメントリンク、通常の関係から慣例によって導入されているプロパティで説明したようにおよび:

Shadow properties can be created by convention when a relationship is discovered but no foreign key property is found in the dependent entity class. In this case, a shadow foreign key property will be introduced.

ドキュメントもさまざまなシナリオに適用される命名規則について説明します。

ConversationIdは、いくつかの方法で導入することができますが、提供される情報によると、最も可能性の高い原因は、コレクション型を有することにより、ServiceRequestと1対多の関係を定義Conversationと呼ばれるエンティティクラスを持つことであると呼ばれるshadowプロパティナビゲーションプロパティ:

public class Conversation 
{ 
    public int Id { get; set; } 
    // ... 
    public ICollection<ServiceRequest> ServiceRequests { get; set; } 
} 

あなたのコメントによると、本当にそうです。 ServiceRequest

(1)いいえコレクションナビゲーションプロパティConversationにおいて、参照ナビゲーションプロパティ:

は完全を期すために、ここでそのようなプロパティを生成するいくつかの他の可能なシナリオではない

public class Conversation 
{ 
    public int Id { get; set; } 
    // ... 
} 

public class ServiceRequest 
{ 
    // ... 
    public Conversation Conversation { get; set; } 
} 

(2)いいえナビゲーションプロパティConversationServiceRequestで、流暢な構成:

modelBuilder.Entity<Conversation>() 
    .HasMany<ServiceRequest>(); 

または

modelBuilder.Entity<ServiceRequest>() 
    .HasOne<Conversation>(); 

または上記のバリエーション。

(3)いいえ関係関与を、流暢な構成によって作成されたプロパティをシャドウ:

modelBuilder.Entity<ServiceRequest>() 
    .Property<int>("ConversationId"); 
関連する問題