2017-01-20 10 views
0

1から0..1の関係を達成するEntity Frameworkに固有の問題があるようです。 私は2つのエンティティを持っています。エンティティフレームワークのコード最初の1から1..0の関係

  1. FamilyMember
  2. 人の詳細情報を格納し、私はプロフィール画像が保存されているが、それは必須ではありませんImageStoreを持ってFamilyMember ImageStore

。そのため、ファミリーメンバーにはプロフィール画像がある場合とない場合があります。 私が持っている問題は:ImageStoreに格納されているプロフィール画像を持っているときに、ImageStoreデータでFamilyMemberオブジェクトを取得しますが、ImageStoreにプロフィール画像がないときは、全体のFamilyMemberオブジェクトがImageStoreオブジェクトFamilyMemberがnullの場合 私はこの問題を1日助けに戻る前に苦労しました。

私は、私は二つのモデルを見てみましょうEntity Frameworkの6.0

をSQLiteにも使用しています:

FamilyMember

public class FamilyMember : PropertyChangedNotification 
    { 
     [Key] 
     public long FamilyMemberId { get; set; } 
     [ForeignKey("ImageStore")] 
     public int? ProfilePictureId { get; set; }  
     public ImageStore ImageStore { get; set; } 
    } 

ImageStore

public class ImageStore : PropertyChangedNotification 
    { 
     [Key] 
     public int ImageStoreId { get; set; } 
     [Required] 
     public string ImageFile { get; set; } 
     [Required] 
     public Byte[] ImageBlob { get; set; } 
     public string FileName { get; set; } 
     [Required] 
     public int FileSize { get; set; }   
    } 

ここ

public class ADataContext : DbContext 
    { 
     public ADataContext() 
      : base("name=ADataContext") 
     { 

     } 

     public ADataContext(string filename, string password) 
      : base(new SQLiteConnection() 
      { 
       ConnectionString = 
        new SQLiteConnectionStringBuilder() 
        {DataSource = filename, ForeignKeys = true, Password = password } 
         .ConnectionString 
      }, true) 
     { 
     } 

     public ADataContext(string filename) 
      : base(new SQLiteConnection() 
      { 
       ConnectionString = 
        new SQLiteConnectionStringBuilder() { DataSource = filename, ForeignKeys = true } 
         .ConnectionString 
      }, true) 
     { 
      Database.SetInitializer<ADataContext>(null); 
     } 

     public DbSet<FamilyMember> FamilyMembers { get; set; }   
     public DbSet<ImageStore> ImageStore { get; set; }   

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     {     
      modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();  
      modelBuilder.Entity<FamilyMember>().HasOptional(s => s.ImageStore);     
     } 
    } 

のDataContextされており、ここで私は私が思うに、私は最終的に問題の解決策を見つけた

familyMember = _dbContext.FamilyMembers.Include("ImageStore").FirstOrDefault(x => x.FamilyMemberId == memberId); 
+1

Navプロパティは 'virtual'であると仮定していくつかの問題を解決するかもしれない – BradleyDotNET

+0

* FamilyMember全体のオブジェクトは、FamilyMemberのImageStoreオブジェクトの代わりにnullになります* *奇妙なことに、 'ProfilePictureId'と' ImageStore'はnullですが、それでも受け入れられます。 'FamilyMemberId'もnullですか?あなたの 'public ImageStore ImageStore'は' public virtual ImageStore ImageStore'でなければなりません([virtual keyword](https://msdn.microsoft.com/en-us/library/9fkccyh4.aspx)ナビゲーションプロパティのオーバーライド) –

+0

右..それは私が言っていたものです – BradleyDotNET

答えて

0

積極的なロードを使用してFamilyMemberデータを取得していますLINQ文です。データベーステーブルとモデルが一致しませんでした。モデルにNOT NULL制約で作成されていない1つの必須フィールドがありました。 データベースに行を作成したとき、そのフィールドはnullであり、エンティティ・フレームワークがその行を取得していたときに、その行を黙って削除していました。 最後に、データベースをモデルと同期させることで問題を解決しました。

関連する問題