我正在使用Cocktail,Devforce 2012 7.2.2,我有一个codeFirst模型。
当我尝试使用鸡尾酒预加载我的实体时,我的一个实体使用异常的时间将7个实体导入到我的entityManager的缓存中!! 在下面的日志之后,导入它们需要大约6秒。
(DEBUG SL) 16:32:28.187 : MyApp.Common.PreLoadRepository`1:OnManagerCreated : PreLoadRepository<MyApp.Module.Domain.Entities.ModeTraitment>.Seed() imported 0 entites in 0.9998 ms. : ThreadId(1)
(DEBUG SL) 16:32:28.226 : MyApp.Common.PreLoadRepository`1:OnManagerCreated : PreLoadRepository<MyApp.Module.Domain.Entities.Motif>.Seed() imported 23 entites in 33.0001 ms. : ThreadId(1)
(DEBUG SL) 16:32:28.230 : MyApp.Common.PreLoadRepository`1:OnManagerCreated : PreLoadRepository<MyApp.Module.Domain.Entities.Attribut>.Seed() imported 0 entites in 1.0002 ms. : ThreadId(1)
Une exception de première chance de type 'System.NullReferenceException' s'est produite dans MyApp.Module.Domain.tn.SL
Une exception de première chance de type 'System.Reflection.TargetInvocationException' s'est produite dans mscorlib.dll
Une exception de première chance de type 'System.NullReferenceException' s'est produite dans MyApp.Module.Domain.tn.SL
Une exception de première chance de type 'System.Reflection.TargetInvocationException' s'est produite dans mscorlib.dll
...
Une exception de première chance de type 'System.NullReferenceException' s'est produite dans MyApp.Module.Domain.tn.SL
Une exception de première chance de type 'System.Reflection.TargetInvocationException' s'est produite dans mscorlib.dll
(MyApp DEBUG SL) 16:32:34.958 : MyApp.Common.PreLoadRepository`1:OnManagerCreated : PreLoadRepository<MyApp.Module.Domain.Entities.TypeInterv>.Seed() imported 7 entites in 6726.06 ms. : ThreadId(1)
(MyApp DEBUG SL) 16:32:34.972 : MyApp.Common.PreLoadRepository`1:OnManagerCreated : PreLoadRepository<MyApp.Module.Domain.Entities.TypeIdentity>.Seed() imported 2 entites in 10.0012 ms. : ThreadId(1)
日志中显示的所有异常都发生在执行此实体的:entityManager.ImportEntities(entities,MergeStrategy.OverwriteChanges):TypeInterv
此实体使用TPH。 TypeInterv继承了一个名为RefenceBase的基类。 Preloader还加载了许多实体,这些实体也继承了这个基类(ModeTraitment,Attribut,...)而没有任何问题!
该实体如下所示:
[DataContract(IsReference = true)]
public class TypeInterv : ReferenceBase
{
[DataMember]
[Required]
public bool ForProf { get; set; }
[DataMember]
[Required]
[Taux]
public decimal TauxRet { get; set; }
[DataMember]
public RelatedEntityList<Tarif> Tarif { get { return null; } }
}
我试图清理实体以找出可能存在的问题。如果我删除了RelatedEntityList,我仍然会得到例外和过多的执行时间。 如果我删除了两个属性(只有一个没有修复它),我不再获得例外,实体在7ms内导入。
可能导致问题的原因是什么?我猜的是与postsharp注入的代码相关的东西?
注意:实体有一个基本的配置类:
public class TypeIntervConfiguration: EntityTypeConfiguration<TypeInterv>
{
public TypeIntervConfiguration()
{
Map(e =>
{
e.ToTable(Cst.Tables.TblReferenceBase);
e.Requires(Cst.Fields.Discriminant)
.HasValue(Cst.ReferenceBase.DiscriminantTypeInterv);
});
Property(p => p.ForProf)
.HasColumnName(Cst.Fields.TypeIntervForProf);
Property(p => p.TauxRet)
.HasColumnName(Cst.Fields.TypeIntervTauxRet);
}
}
属性Taux是一个EF公约(我试图在没有attribut的情况下进行测试而且没有修复它)
public class TauxConvention: Convention
{
/// <summary>
/// Constructeur
/// </summary>
public TauxConvention()
{
this.Properties()
.Where(x => x.GetCustomAttributes(false).OfType<TauxAttribute>().Any())
.Configure(c => c.HasPrecision(18, 8));
}
}
有什么想法吗?