如果我的域模型看起来像这样:
public class Foo<T> {
public Guid Id { get; set; }
public string Statement { get; set; }
public T Value { get; set; }
}
我想将它用于内置数据类型(字符串,整数等)以及日期。 我想用它来像:
var foo = new Foo<string>();
foo.Value = "Hey";
如何使用EF Core将其持久保存到数据库?
我想数据库表看起来像
| Id | Statement | ValueAsString | ValueAsDecimal | ValueAsDate | ValueAsInt |
| 1 | NULL | "Hey" | | | |
| 2 | NULL | | 1.1 | | |
答案 0 :(得分:4)
你还应该上课。你的班级Foo
应该是抽象的。
所以你会得到“:
public abstract class Foo<T> {
public Guid Id { get; set; }
public string Statement { get; set; }
public T Value { get; set; }
}
那么你的实现类将是:
public class Orders: Foo<Order> {
}
现在你的Orders
类包含了可存储的泛型类型。
答案 1 :(得分:1)
如果要将不同的值类型持久存储在与问题类似的单个表中,可以执行以下操作:
$('.heroSlide').owlCarousel({
smartSpeed: 1500,
items: 1,
margin:0,
nav:true,
dots:true,
onInitialized: function () { /* read and use $('.topSlidetxt').height() here */ },
onResized: function () { /* read and use $('.topSlidetxt').height() here */ },
});
在DbContext类中添加属性:
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的OnConfiguring方法中为Foo表设置列名:
public DbSet<FooString> FooStrings { get; set: }
public DbSet<FooInt> FooInts { get; set; }
此代码将生成一个表“ Foo”,其中包含ID,Statement,ValueAsString和ValueAsInt列。
您仍然需要为要用于T的每个类型/列创建一个类,我认为您无法解决。