[英]Sequence contains no matching element - EntityFramework
我正在使用 EF 6.1.0 并正在创建 WCF 服务。
首先,我创建了一个 Class 库,其中包含用于初始化 EF 的实体、映射器和上下文。 我还创建了一个包含上下文实例化的 class 并具有以下代码:
public IQueryable<[Entity]> GetAll()
{
return context.[Entity].AsQueryable();
}
另一方面,我在同一个项目上创建了一个 WCF 服务,并在 .svc 文件中调用 function GetAll(),如下所示:
public List<[Entity]> GetList()
{
[iObject] repository = new [Object](new Context());
return repository.GetAll().ToList();
}
该项目正在建设中。 我什至检查了 cconfiguration,它在正确的数据库中。 但是,假定创建的数据库和表不存在,并且返回中显示错误“序列不包含匹配元素”。
如果这个令人困惑,您能否指出一些使用 Code First Entity Framework 的 WCF 服务的链接。
我有一个错误,我得到一个System.InvalidOperationException
消息,其中消息Sequence contains no matching element
因为在表配置.HasColumnType()
不正确的字符串值传递给.HasColumnType()
。
我只是遇到了同样的问题。 来自数据库的Code First向导生成的列之一为[Column(TypeName = "date")]
。
调用.saveChanges()
导致Sequence contains no elements
。
将已定义的列更改为[DataType(DataType.DateTime)]
它按预期方式工作。
添加迁移或更新数据库时,我也遇到了相同的错误。
原因是我使用了错误的列类型
[Column("ImageType", TypeName = "varchar(20)")]
public string ImageType
{
get;
set;
}
但是当我从varchar中删除20时,它开始为我工作
[Column("ImageType", TypeName = "varchar")]
public string ImageType
{
get;
set;
}
对我而言,此消息是由于对Column属性中的TypeName的误解。
列属性:[列(字符串名称,属性:[Order = int],[TypeName = string])
name:数据库表中列的名称。
顺序:列的顺序,从零索引开始。 (可选的)
TypeName:列的数据类型。 (可选的)
此TypeName必须仅是类型的名称,并且不得包含精度,小数位数或长度以及任何其他内容。 例如以下将导致错误
[Column(TypeName =“ nvarchar(600)”)]
虽然下面的方法可以正常工作,但是您可能希望具有特定的列大小,并且其中一种方法是使用流畅的API
[Column(TypeName =“ nvarchar”)]
对。 抓住了我也因为分心的时刻,我把文本长那里BIGINT列即HasColumnType("long")
-你能相信吗? 真是个小丑!
生成器通常会正确地创建EF类,但是如果您不能使用或不想使用EF类,则可以使用带有一些静态字符串字段的静态类,以便可以很好地智能感知它:
public static class DatabaseColumnTypes
{
/// <summary>
/// Use this for 'boolean' values.
/// </summary>
public static string BitColumn = "bit";
/// <summary>
/// Use this for 'byte' values.
/// </summary>
public static string TinyIntColumn = "tinyint";
/// <summary>
/// Use this for 'long' values.
/// </summary>
public static string BigIntColumn = "bigint";
/// <summary>
/// Use this for 'string' values.
/// </summary>
public static string VarcharColumn = "varchar";
// etc
}
现在您可以执行HasColumnType( DatabaseColumnTypes.BigIntColumn )
我知道,这很懒,我应该记住这些类型,但是每隔一段时间我就会发现自己在Stack Overflow上查找它,这样可以节省时间。
将我的会员模型重命名为Student时,在其他类中有一个导航属性,我得到了相同的错误消息:
public IList<Student> Members { get; set; }
我将其更改为:
public IList<Student> Students { get; set; }
问题解决了!
在使用Fluent API定义Table-Per-Type继承时(作为从EntityTypeConfiguration<T>
派生的类),并且错误地重新定义了已经在基类配置中定义的字段,我得到了此错误(两者完全相同)。 我正在使用EntityFramework 6.2.0 nuget包。
我之所以陷入这一困境,是因为我引用了引用属性而不是Id属性。
var t = modelBuilder.Entity<CyDocument>();
t.HasIndex(b => b.DocTypeId);
我遇到了相同的异常System.InvalidOperationException
,消息Sequence contains no matching element
。 这是在Entity Framework 6.0.0
中。 当我升级到Entity Framework 6.4.4
时,我收到带有Additional information: The store type 'VARCHAR2(10)' could not be found in the OracleEFProvider provider manifest
[Column("SCOPE_ID", TypeName = "varchar(10)")]
public string ScopeId
{
get;
set;
}
我通过删除 TypeName 更改为如下编码
[Column("SCOPE_ID"]
public string ScopeId
{
get;
set;
}
对我而言,当将班级项目切换为“ 设为启动项目”时,它对您有所帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.