1

我有以下类型:

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() 方法的参数。这是构建输出的实际错误:

The type 'Races.Minutes' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'System.Data.Entity.ModelConfiguration.Configuration.StructuralTypeConfiguration.Property(System.Linq.Expressions.Expression>)' C:\Projects\Races\RaceDataContext.cs

4

1 回答 1

5

You were close to the solution.

modelBuilder.Entity<Race>().Property(x => x.TotalMinutes.Value)
   .HasColumnName("RACEMINUTES");
于 2012-06-04T02:48:40.107 回答