我似乎有一个与Entity Framework实现1到0..1关系的独特问题; 我有两个实体。
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);
}
}
答案 0 :(得分:0)
我想,我终于找到了问题的解决方案。数据库表和模型不匹配。模型中有一个必需字段,它不是使用NOT NULL约束创建的。 当我在数据库中创建一行时,该字段为空,当实体框架获得该行时,它正在默默地删除它而不是抱怨它。 最后通过使数据库与模型同步来解决问题。