我有一个复杂的类型
[ComplexType]
public class mm
{
public Guid g { get; set; }
}
和继承层次结构
public abstract class base1
{
public Guid id { get; set; }
public String name { get; set; }
public mm mm1 { get; set; }
}
和各种派生类:
public class derived1 : base1
{
public mm derived1mm1 { get; set; }
}
派生类中包含多个mm
个实例,因此,对于大约10个派生类的层次结构,总共有大约100个mm
个字段。
生成的数据库模式是正确的,看起来大致如下:
table base1
列id(guid)
列名(字符串)
栏mm1_g(guid)
column derived1mm1_g(guid)
column derived1mm2_g(guid)
column derived2mm1_g(guid)
......
启动时,EF中的第一个查询(预热的那个)需要几十秒。
如果我将mm复杂类型替换为与其对应的单个字段,那么结果类如下所示: 公共抽象类base1 { public Guid id {get;组; } public String name {get;组; } public guid mm1 {get;组; } }
和各种派生类:
public class derived1 : base1
{
public guid derived1mm1 { get; set; }
}
,启动时间不到一秒钟。唯一的区别是我已经弄平了复杂类型,如果复杂类型有多个字段和它自己的行为,这不是一个好的答案。
为了清楚起见,这种性能影响仅在第一次查询时发生,即使数据库中绝对没有数据也会发生。
mm是一个复杂的类型,它本身不是一个实体,并且没有为它创建表,所以没有涉及的连接或任何东西。
这听起来像EF6的模型生成实现中的某种错误,其中涉及大量复杂类型字段。
有没有人有一个解决方法可以让我保留复杂的类型。这是一个已知的错误吗?
答案 0 :(得分:1)
我最近在电子商务应用程序上完成了一些实体性能改进。
我们学到的东西,可能会对你有所帮助