2017-07-13 17 views
0

ほとんどの標準(例えば、一部のテーブルにはPKがない、いくつかのFKはどこにもありません...など)に対してかなりのデータベースがあります。 1つのエンティティは、entity1にはいくつかのフィールド、field1、Field2、field_3があります。Entity Frameworkはデータベースからモデルを正しく作成できません

何らかの理由で、私はそれをマップしようとすると、field1はOKになります、Field2は私にエラーを与え、field_3も大丈夫です。

次のようにフィールド2がマッピングされています

public virtual DbSet<field2> field2 { get; set; } 

が手動でこのようにそれを編集して動作し、完全に問題が修正されています。

public virtual DbSet<Field2> field2 { get; set; } 

EFはそれを正しく構築するために失敗した理由を私は知らないがそれは技術的にデータベースから読み込んでおり、それに関連する他の問題はないからです。これは、作業するエンティティを含む自動生成されたファイルにも属します。そのため、私の変更は誰かがデータベースからモデルを更新するたびに自動的に再生成されるファイルの上に何か問題を引き起こす可能性があります。

ありがとうございます。あなたの上記のコードで

+1

'field2'クラスと' Field2'クラスのソースコードを含めてください。 – mjwills

+0

@mjwillsコードが役立つものがわからない、それはEFの自動生成ファイルだ。私はそれをコメントによく見えないので、OPに追加します。 –

答えて

0

答えが見つかりました。 EF6はこれを含むエラーで悩まされていることが分かります。

このため、データベース生成モデルのサポートを中止し、自動生成クラスの代わりにコードファーストアプローチを採用しました。

要するに、コードファーストをあなたの手続きとして使用できる場合は、EFコアに移動します。

0
//------------------------------------------------------------------------------ 
// <auto-generated> 
//  This code was generated from a template. 
// 
//  Manual changes to this file may cause unexpected behavior in your application. 
//  Manual changes to this file will be overwritten if the code is regenerated. 
// </auto-generated> 
//------------------------------------------------------------------------------ 

namespace MyProject.Models 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class Field2 
    { 
     public int IdFoo { get; set; } 
     public int IdBar { get; set; } 
     public string Name { get; set; } 
     public Nullable<int> IdSomething { get; set; } 
     public Nullable<int> Idwhatever { get; set; } 
     public string Blah { get; set; } 
     public Nullable<int> idBleh { get; set; } 
    } 
} 
public virtual DbSet<field2> field2 { get; set; } 

field2は、第二のproperty/variableであるTypeは(variableTypeの差のためにthis linkを参照)が存在する参照。

理由:

public virtual DbSet<field2> field2 { get; set; } 

がコンパイルされませんが、あなたのコードベースにfield2と呼ばれるクラスを持っていないということです。

理由は:

public virtual DbSet<Field2> field2 { get; set; } 

コンパイルんが、あなたのコードベースでField2と呼ばれるクラスを持っているということです。型名はcase sensitiveです。

+0

ありがとうございます。私はすでに知っている、実際の問題は、EFがデータベースを正しくマッピングできないため、手動で修正する必要がない理由です。エラーを促すコードはEFによって自動生成されていましたが、これまで私には起こっていませんでした。私はこのフレームワークを使って、今のところ1年近く働いています。 –

+0

自分自身を明確にするために、私がこのファイルを操作しないという自動生成されたクラスのソースコードの状態に注目してください。ただし、デフォルトでは壊れています。 –

+0

他のアイデアがあるのだろうかと思います。 –

関連する問題