2016-09-30 63 views
0

HI我有兩個表(電影Movy實體和生產者爲生產者)。電影中有一個生產者和生產者有很多movies.here是ER診斷 Picture: ER DiagramDataGridView中丟失的一些對象

當我在我的DataGridView的數據索裏設置爲ctx.Movies.ToList()的一些電影中可是沒有任何生產商的名單。即使它在數據庫中不爲空。 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 * from [Producer] WHERE ProducerId like'%Universal%'' –

+0

它給了我一個名爲universal的製作人。 –

回答

0

好的我發現了這個問題。它是實體框架無法自動映射一些字符串外鍵。 對我來說那些電影有producerID ='Universal'外鍵,電影Producer Object爲null(無法映射)。所以一旦我更新我的數據庫,如使用以下查詢follwoing:它現在工作: update Movies set Producer='Warner' where Producer='Universal';

+0

而環球之後是尾隨空間。 Sql Query忽略了這個空間。但c#wasnt。 :( –

0

您可以Include方法試試。

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

添加後還有一些生產者null包括 –

+0

您是否使用模型優先方法?看起來電影和產品之間的關係使用了*** String ***數據類型的ProducerID,而不是*** Integer ***或*** Guid ***。我們通常不會使用*** float ***貨幣和*** short ***來獲取TotalStock和NumberRented,而是使用*** decimal ***和*** integer ***。這有點奇怪。 – Win

+0

是的,我首先使用模型。我已經給出了數據庫。不能改變它。它生成的代碼是 –