【发布时间】:2014-04-17 15:50:49
【问题描述】:
使用 Entity Framework 4.0 版(或与 .NET 4.0 兼容的任何其他版本),我想映射这个现有的关系数据库架构:
到这个逻辑对象模型:
我尝试设置如下:(我希望德语字幕不会太迷失方向。)
实体框架给了我这个错误:
错误 3031:映射片段时出现问题……:表
FooBs中的不可为空列FooBs.B已映射到可空实体属性。
在逻辑模型中,B 应该可以为空。但是,在数据库中,它不是,因为它驻留在一个单独的表中。 (我喜欢避免可以为空的数据库列。)它只有在 Foos 和 FooBs 连接时才可以为空(由于 1:0..1 基数)。
如何在不更改数据库架构或对象模型的情况下修复我的映射?
P.S.:我也试过这个 EF 6.0 代码优先映射:
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Foo>() .HasKey(f => f.Id) .Property(f => f.Id).HasColumnName("FooId").HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); modelBuilder.Entity<Foo>().Map(f => { f.Property(_ => _.A); f.ToTable("Foos"); }).Map(f => { f.Property(_ => _.B); f.ToTable("FooBs"); }); }但这也不起作用:从数据库中读取时,EF 会忽略
FooBs中没有子记录的所有记录;写入数据库时,它会尝试将NULL插入到FooBs.B中,以将所有Foo的B属性设置为null。
【问题讨论】:
标签: entity-framework .net-4.0 nullable non-nullable