Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 导致实体框架ModelValidationException的编码UI项目_C#_Entity Framework_Generics_Interface_Coded Ui Tests - Fatal编程技术网

C# 导致实体框架ModelValidationException的编码UI项目

C# 导致实体框架ModelValidationException的编码UI项目,c#,entity-framework,generics,interface,coded-ui-tests,C#,Entity Framework,Generics,Interface,Coded Ui Tests,我遇到了一个问题,编码的UI项目在数据访问上抛出ModelValidationException,但其他项目(单元测试、Web、控制台、WinForm)没有 我的底层数据库有多组代码优先实体,它们对于不同的状态具有相似的属性。大致来说,想想报价和销售记录。由于我无法控制或输入的原因,这些记录根据业务事务的状态分为不同的表 因此,我有一组具有公共字段和一些重复的实体: public class QuoteMoney { Decimal Amount { get; set; }

我遇到了一个问题,编码的UI项目在数据访问上抛出ModelValidationException,但其他项目(单元测试、Web、控制台、WinForm)没有

我的底层数据库有多组代码优先实体,它们对于不同的状态具有相似的属性。大致来说,想想报价和销售记录。由于我无法控制或输入的原因,这些记录根据业务事务的状态分为不同的表

因此,我有一组具有公共字段和一些重复的实体:

public class QuoteMoney
{
     Decimal Amount { get; set; }
     //...etc.
}

public class SaleMoney
{
     Decimal Amount { get; set; }
     //...etc.
}

public class Quote
{
    List<QuoteMoney> QuoteMonies { get; set; }
     //...etc.
}

public class Sale
{
    List<SaleMoney> SaleMonies { get; set; }
     //...etc.
}
对于从整个模型中的泛型接口继承的每种类型上的每种类型的属性,这将递归。这只发生在编码的UI项目中,而不发生在任何其他项目类型上

编码UI和实体框架之间是否存在已知冲突


编辑:添加在堆栈跟踪中,次要文本更正

编码UI是一个自动黑盒测试工具,它在客户端浏览器中工作,与服务器端的EF无关

这是你放在系统中的数据,而不是编码的用户界面,至少表面上是这样。 我们可以在您的代码片段中看到字符串长度错误和重复错误


请尝试减少通过CUI提供的字符串的长度,看看是否有帮助。

编码UI是一种自动黑盒测试工具,它在客户端浏览器中工作,与服务器端的EF无关

这是你放在系统中的数据,而不是编码的用户界面,至少表面上是这样。 我们可以在您的代码片段中看到字符串长度错误和重复错误


请尽量减少通过CUI提供的字符串的长度,看看是否有帮助。

Erik,正如Naeem在《概述》中所说,CodedUI是一种黑盒解决方案。我想我从较高的层次上理解了您要做的事情——将记录插入数据库,确保它通过CodedUI显示在应用程序的UI中,然后删除它。据我所知,我没有遇到任何与EF有关的CodedUI特定不兼容或皱纹

我的直觉是,您会注意到单元测试项目和CodedUI项目之间的差异。也许在参考资料中

另一个建议是让CodedUI项目调用另一个项目中存在的数据设置方法。理想情况下,您的服务/单元测试可能需要类似的数据设置


我承认我对EF很生疏,但我不确定的是,你是如何在没有验证的情况下插入这些记录的,正如你在评论中所建议的那样。

Erik,正如Naeem在《概述》中所说,CodedUI是一种黑盒解决方案。我想我从较高的层次上理解了您要做的事情——将记录插入数据库,确保它通过CodedUI显示在应用程序的UI中,然后删除它。据我所知,我没有遇到任何与EF有关的CodedUI特定不兼容或皱纹

我的直觉是,您会注意到单元测试项目和CodedUI项目之间的差异。也许在参考资料中

另一个建议是让CodedUI项目调用另一个项目中存在的数据设置方法。理想情况下,您的服务/单元测试可能需要类似的数据设置


我承认我对EF很生疏,但我不确定的是,你是如何在没有验证的情况下插入这些记录的,正如你在评论中所建议的那样。

是的,你会认为这就是事实。然而,问题在于,在编码的UI项目(任何编码的UI项目,甚至是新创建的项目)中,EDM模型正在进行不应该发生的验证。明确排除名称有问题的字段;在其他项目执行路径中,排除是值得尊重的。在编码的UI项目中,这种排除在EDM模型验证中是不受尊重的,这显然令人困惑。此外,EF是从编码的UI方法显式调用的,而不是服务器端执行。在这种情况下甚至没有服务器。听起来比我想象的要复杂。我希望我能帮忙,但想不出什么。我只能祝你好运:染料,你会认为情况就是这样。然而,问题在于,在编码的UI项目(任何编码的UI项目,甚至是新创建的项目)中,EDM模型正在进行不应该发生的验证。明确排除名称有问题的字段;在其他项目执行路径中,排除是值得尊重的。在编码的UI项目中,这种排除在EDM模型验证中是不受尊重的,这显然令人困惑。此外,EF是从编码的UI方法显式调用的,而不是服务器端执行。在这种情况下甚至没有服务器。听起来比我想象的要复杂。我希望我能帮忙,但想不出什么。我只能祝你好运:D
public Interface IContainer<GContainer, GMoney>
    where GContainer : IContainer<GContainer, GMoney>
    where GMoney : IMoney<GContainer, GMoney>
{
    List<GMoney> Monies { get; set; }
}

public Interface IMoney<GContainer, GMoney>
    where GContainer : IContainer<GContainer, GMoney>
    where GMoney : IMoney<GContainer, GMoney>
{
     Decimal Amount { get; set; }
}
public class QuoteMoney : IMoney<Quote, QuoteMoney>
{
     Decimal Amount { get; set; }

     [NotMapped]
     Decimal IMoney<Quote, QuoteMoney>.Amount { get; set; }
     //...etc.
}

public class SaleMoney : IMoney<Sale, SaleMoney>
{
     Decimal Amount { get; set; }

     [NotMapped]
     Decimal IMoney<Sale, SaleMoney>.Amount { get; set; }
     //...etc.
}

public class Quote : IContainer<Quote, QuoteMoney>
{
    List<QuoteMoney> QuoteMonies { get; set; }

     [NotMapped]
     List<QuoteMoney> IContainer<Quote, QuoteMoney>.Monies { get; set; }
     //...etc.
}

public class Sale : IContainer<Sale, SaleMoney>
{
    List<SaleMoney> SaleMonies { get; set; }

     [NotMapped]
     List<SaleMoney> IContainer<Sale, SaleMoney>.Monies { get; set; }
     //...etc.
}
[Long Namespace].IQuote<[Long Namespace].Quote, [Long Namespace].QuoteMoney>, etc.>.Monies : Name: The specified name must not be longer than 480 characters: '[repeated name]'
[Long Namespace].IQuote<[Long Namespace].Quote, [Long Namespace].QuoteMoney>, etc.>.Monies : Name: The specified name is not allowed: '[repeated name]'
at System.Data.Entity.Core.Metadata.Edm.EdmModel.Validate()
at System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest, DbProviderInfo providerInfo)
at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
at System.Data.Entity.Internal.InternalContext.Initialize()
at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider()
at System.Linq.Queryable.First[TSource](IQueryable`1 source)