如果您想在与您的问题类似的单个表中将不同的值类型持久保存到数据库中,您可以这样做:
public interface IHasValue<T> {
T Value { get; set; }
}
public abstract class Foo {
public Guid Id { get; set; }
public string Statement { get; set; }
}
public class Foostring : Foo, IHasValue<string> {
string Value { get; set; }
}
public class FooInt : Foo, IHasValue<int> {
int Value { get; set; }
}
在你的DbContext
类中添加属性:
public DbSet<FooString> FooStrings { get; set: }
public DbSet<FooInt> FooInts { get; set; }
OnModelCreating
您可以在以下方法中设置表的列名DbContext
:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// include the base class so a single table is created for the hierarchy
// rather than a table for each child class
modelBuilder.Entity<Foo>().ToTable("Foos");
// Specify the column names or you will get weird names
modelBuilder.Entity<FooString>().Property(entity => entity.Value)
.HasColumnName("ValueAsString");
modelBuilder.Entity<FooInt>().Property(entity => entity.Value)
.HasColumnName("ValueAsInt");
}
此代码将生成一个包含、、和Foos
列的表。可以在此处找到有关该列的更多信息Id
Statement
Discriminator
ValueAsString
ValueAsInt
Discrimiator
您仍然需要为要用于的每个类型/列创建一个类T
,我认为您无法解决这个问题。