2016-09-30 11 views
0

私は2つのテーブル(ムービームービーエンティティとプロデューサプロデューサー)を持っています。私はすべてのプロデューサーを持っているdoesntのリスト中のいくつかの映画)ctx.Movies.ToList(に私のDataGridViewのデータsoureを設定すると、ムービーは1人のプロデューサーとプロデューサーが多くmovies.hereを持っていたER DIAG Picture: ER DiagramDataGridViewに多少のオブジェクトがありません

です。そのデータベースではnullではありません。 Picture:Program with missing producer

//Movie Entity Class 
public partial class Movy 
    { 
     public short VideoCode { get; set; } 
     public string MovieTitle { get; set; } 
     public string MovieType { get; set; } 
     public string Rating { get; set; } 
     public Nullable<float> RentalPrice { get; set; } 
     public string ProducerID { get; set; } 
     public string Director { get; set; } 
     public string Media { get; set; } 
     public Nullable<short> TotalStock { get; set; } 
     public Nullable<short> NumberRented { get; set; } 
     public virtual Producer Producer { get; set; } 
    } 
} 

//Producer Entity Class 
public partial class Producer 
    { 
     public Producer() 
     { 
      this.Movies = new HashSet<Movy>(); 
     } 
     public string ProducerID { get; set; } 
     public string ProducerName { get; set; } 
     public string CountryCode { get; set; } 
     public virtual ICollection<Movy> Movies { get; set; } 
    } 

// MyDBEntities ctx 
public partial class MYDBEntities : DbContext 
    { 
     public MYDBEntities() 
      : base("name=MYDBEntities") 
     { 
     } 
     public virtual DbSet<Movy> Movies { get; set; } 
     public virtual DbSet<Producer> Producers { get; set; } 
    } 

//this is my function in windows form which is having some producer missing in movie datalist. i have added the picture of output 

    private void Form1_Load(object sender, EventArgs e) 
     { 
      MYDBEntities ct = new MYDBEntities(); 
      dataGridView1.DataSource = ct.Movies.ToList(); 
     } 

P.S:[ピクチャー:データベースのデータ]

/* i checked each product and its producer. some producer is null there. 
    even though its not null in database(I have uploaded db pic) [3]*/ 

      List<Movy> ls = ct.Movies.ToList(); 
      foreach(Movy mov in ls) 
      { 
       //some mov.Producer is null here. 
      } 

+0

データベースに対して「TSQL」クエリを直接実行するとどうなりますか? '[プロデューサー]からのSELECT * '%ユニバーサル%'のようなプロデューサーID ' –

+0

それは私にユニバーサルという名前のプロデューサーを与えます。 –

答えて

0

問題が見つかりました。 Entity Frameworkは一部の文字列の外部キーを自動マッピングできませんでした。 私の映画はproducerID = 'ユニバーサル'の外部キーを持ち、ムービープロデューサオブジェクトはnull(マップできませんでした)でした。一度データベースを更新すると、次のようなクエリを使用するようになります。現在作業中: update Movies set Producer='Warner' where Producer='Universal';

+0

ユニバーサルの後にスペースが続いた。 SQLクエリはスペースを無視していました。しかし、C#wasnt。 :( –

0

あなたがInclude方法で試すことができます。

MYDBEntities ct = new MYDBEntities(); 
dataGridView1.DataSource = ct.Movies.Include("Producer").ToList(); 
+0

まだ追加した後のプロデューサのヌル含まれています –

+0

Model Firstアプローチを使用していますか? MovieとProductの関係は、ProducerIDを使用しているようです。*** String ***データタイプではなく、*** Integer ***または*** Guid ***です。私たちは通常、*** float ***を通貨に、*** short ***をTotalStockとNumberRentedに使用しません。代わりに、*** decimal ***と*** integer ***を使用します。それは少し奇妙です。 – Win

+0

まず、モデルを使用しています。私はすでにデータベースを与えている。それを変更することはできません。生成コード –

関連する問題