我有以下类型:
public class Minutes
{
public double Value { get; set; }
}
此类型用于以下实体:
public class Race
{
public string Name { get; set; }
public string Location { get; set; }
public Minutes TotalMinutes { get; set; }
}
我有这样的DbContext:
public class RaceDataContext: DbContext
{
public DbSet<Race> Races { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.ComplexType<Minutes>().Property(x => x.Value);
}
}
在应用程序开发中,我们一直在使用MS-SQL数据库,没有任何问题。现在,我们必须转移到客户端的Oracle数据库。 Oracle数据库具有固定表,其中包含我们无法更改的列。我们需要能够阅读,更新和插入比赛。所以,我已经将我的映射代码更新为:
public class RaceDataContext: DbContext
{
public DbSet<Race> Races { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.ComplexType<Minutes>().Property(x => x.Value);
modelBuilder.Entity<Race>().Property(x => x.TotalMinutes).HasColumnName("RACEMINUTES"); // <-- ERROR HERE
}
}
以上代码无法编译。它表示TotalMinutes必须是一个不可为空的值,可用作.Property()方法的参数。这是构建输出中的实际错误:
“Races.Minutes”类型必须是不可为空的值类型才能实现 在泛型类型或方法中将其用作参数“T” 'System.Data.Entity.ModelConfiguration.Configuration.StructuralTypeConfiguration.Property(System.Linq.Expressions.Expression&gt;)'C:\ Projects \ Races \ RaceDataContext.cs
答案 0 :(得分:5)
你接近解决方案。
modelBuilder.Entity<Race>().Property(x => x.TotalMinutes.Value)
.HasColumnName("RACEMINUTES");