我正在构建一个必须插入大量数据的通用方法。所以我使用SqlBulkCopy进行插入,使用反射从对象获取值,使用MappingApi获取数据库模式。我不需要插入嵌套对象以使其尽可能简单。
我试图获得这样的表名:
using (var ctx = GetStorage())
{
tableName = ctx.Db(typeof(T)).TableName;
}
它适用于基类,但不适用于派生类。
架构:
public abstract class A
{
public int Id { get; set; }
}
public class B: A
{
public int Site_Id { get; set; }
}
public class AMap : EntityTypeConfiguration<A>
{
public AMap()
{
HasKey(t => t.Id);
Property(t => t.Id).IsRequired();
ToTable("A");
Property(t => t.Id).HasColumnName("Id");
}
}
public class BMap : EntityTypeConfiguration<B>
{
public BMap()
{
HasKey(t => t.Id);
Property(t => t.Id).IsRequired();
Property(t => t.Site_Id).IsRequired();
ToTable("B");
Property(t => t.Id).HasColumnName("Id");
Property(t => t.Site_Id).HasColumnName("Site_Id");
}
}
EF CRUD操作正在处理此架构。 EF首先针对B类每个操作发送两个请求,然后针对A类发送请求。但是,ctx.Db(typeof(B)).TableName == "A"
关于如何抛出这个并为类获得正确的表名的任何想法?
答案 0 :(得分:0)
如果您可以使用属性而不是ToTable(&#34; B&#34;),这是一个简单的解决方案
public static string GetTableName<T>()
{
var attr = Attribute.GetCustomAttributes(typeof (T), typeof (TableAttribute)).OfType<TableAttribute>().FirstOrDefault();
if (attr != null)
{
return attr.Name;
}
throw new Exception("Could not load TableAttribute of type" + typeof (T).Name);
}