【发布时间】:2019-01-30 02:26:23
【问题描述】:
我有以下领域模型:
public class Country
{
public string ISOAlpha3Code { get; set; }
public string NameUS { get; set; }
public string NameES { get; set; }
public string NameFR { get; set; }
public List<Province> Provinces { get; set; }
}
public class Province
{
public string Code { get; set; }
public string NameUS { get; set; }
public string NameES { get; set; }
public string NameFR { get; set; }
}
必须用于填充这些模型的数据库视图返回一个平面列表,如下所示:
我希望为 DbContext 配置实体,为国家/地区划分省份。
我可以创建一个与数据库结果匹配的域模型,但我真的很想将域模型与其在这个特定数据库中的表示方式分开 - 特别是如果数据库发生变化。
这样的事情可能吗?如果是这样,它将如何实施?
public class CountryConfiguration : IEntityTypeConfiguration<Country>
{
public void Configure(EntityTypeBuilder<Country> builder)
{
builder.ToTable("v_WS_CountriesAndProvinces");
builder.Property(p => p.NameUS).HasColumnName("CountryNameUS");
builder.Property(p => p.NameES).HasColumnName("CountryNameES");
builder.Property(p => p.NameFR).HasColumnName("CountryNameFR");
// something to split out the provinces?
builder.Property(p => p.Provinces).HasConversion(
v => ToDB(v), // to DB
v => FromDB(v) // from DB
);
}
private List<Province> FromDB(object v)
{
throw new NotImplementedException();
}
private object ToDB(List<Province> v)
{
throw new NotImplementedException();
}
}
【问题讨论】:
-
不,您不能使用 EF 来展开数据。
-
@GertArnold 真的吗?我似乎在这里这样做,还是我误解了? .stackoverflow.com/a/51613611/1678148 只是这一块更复杂
-
@Darren 这不是我所说的非扁平化。 OP 希望将包含表示多个对象的非不同数据的一维结果集转换为多维对象图。在使用转换时,我看不到任何使用 EF 的方法。
标签: .net entity-framework .net-core ef-core-2.0