实体框架代码首先1到1..0关系

时间:2017-01-20 00:54:48

标签: c# wpf sqlite entity-framework-6

我似乎有一个与Entity Framework实现1到0..1关系的独特问题; 我有两个实体。

  1. FamilyMember
  2. ImageStore
  3. FamilyMember存储此人的详细信息,我有ImageStore存储个人资料图片,但不是必需的。因此,FamilyMember可能有也可能没有个人资料图片。 我遇到的问题是:当我有一个存储在ImageStore中的个人资料图片时,它会使用ImageStore数据检索FamilyMember对象,但是当我在ImageStore中没有个人资料图片时,整个FamilyMember对象都是null而不是只有ImageStore对象。 FamilyMember为空。 在返回寻求帮助之前,我在这个问题上挣扎了一天。

    我正在使用Sqlite和Entity Framework 6.0

    让我先从两个模型开始:

    FamilyMember

    Robocopy

    ImageStore

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

    这是我的 DataContext

    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; }        
        }
    

    这是LINQ语句,我使用预先加载

    获取FamilyMember数据
    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);                
            }
        }
    

1 个答案:

答案 0 :(得分:0)

我想,我终于找到了问题的解决方案。数据库表和模型不匹配。模型中有一个必需字段,它不是使用NOT NULL约束创建的。 当我在数据库中创建一行时,该字段为空,当实体框架获得该行时,它正在默默地删除它而不是抱怨它。 最后通过使数据库与模型同步来解决问题。