Sequence不包含匹配元素 – EntityFramework

我正在使用EF 6.1.0并正在创建WCF服务。

首先,我创建了一个包含我的实体,Mappers和Context的类库,用于初始化EF。 我还创建了一个包含上下文实例的类,并具有以下代码:

public IQueryable GetAll() { return context.[Entity].AsQueryable(); } 

另一方面,我在同一个项目上创建了一个WCF服务,并在.svc文件中调用函数GetAll(),如下所示:

 public List GetList() { [iObject] repository = new [Object](new Context()); return repository.GetAll().ToList(); } 

该项目正在建设中。 我甚至检查了配置,它位于正确的数据库中。 但是,应该创建的数据库和表不存在,并且返回中显示错误“Sequence contains no matching element”。

如果这个令人困惑,您可以使用Code First Entity Framework向我指出WCF服务的一些链接。

我有一个错误,我得到一个System.InvalidOperationException ,消息Sequence contains no matching element因为我的表配置中传递给.HasColumnType()字符串值不正确。

我刚遇到同样的问题。 Code First from database向导生成其中一列作为[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; } 

如果列类型无效,则entity framework会抛出此exception。 例如:

 // This will throw an error. There is no such type name. [Column(TypeName = "Invalid")] public string Column1 { get; set; } // Works. [Column(TypeName = "varchar")] public string Column1 { get; set; } 

看这些例子:

  • 例1
  • 例2
  • 评论中的其他示例。

对。 也抓住了我,因为在一个分心的时刻,我把文字在那里一个bigint列,即HasColumnType("long") – 你能相信吗?! 多么小丑!

生成器通常会正确地创建您的EF类,但是如果您不能或不想使用它,那么您可以使用带有一些静态字符串字段的静态类,以便您可以非常好地智能化它:

 public static class DatabaseColumnTypes { ///  /// Use this for 'boolean' values. ///  public static string BitColumn = "bit"; ///  /// Use this for 'byte' values. ///  public static string TinyIntColumn = "tinyint"; ///  /// Use this for 'long' values. ///  public static string BigIntColumn = "bigint"; ///  /// Use this for 'string' values. ///  public static string VarcharColumn = "varchar"; // etc } 

现在你可以做HasColumnType( DatabaseColumnTypes.BigIntColumn )

我知道,我知道,这是懒惰的,我应该记住这些类型,但我经常发现自己在Stack Overflow上查找它,这只是节省时间……

对我来说,这条消息是因为对Column属性中的TypeName存在误解。

列属性:[Column(字符串名称,属性:[Order = int],[TypeName = string])

name:db表中列的名称。
顺序:列的顺序,从零索引开始。 (可选的)
TypeName:列的数据类型。 (可选的)

此TypeName必须只是该类型的名称,并且不得包含精度或比例或长度以及任何其他内容。 例如,以下将导致错误

[Column(TypeName =“nvarchar(600)”)]

虽然下面的一个会正常工作,但你可能想要具有特定的列大小,并且这种方法是使用流畅的API

[Column(TypeName =“nvarchar”)]

对我来说,当切换类项目设置为启动项目时,它有所帮助

当我将我的会员模型重命名为Student时,我收到了相同的错误消息,并且我在其他类中有一个导航属性:

 public IList Members { get; set; } 

我改为:

 public IList Students { get; set; } 

问题解决了!

我在使用Fluent API定义Table-Per-Typeinheritance时(作为从EntityTypeConfiguration派生的类)错误地重新定义了已在基类配置中定义的字段(两者完全相同)时出现此错误。 我正在使用EntityFramework 6.2.0 nuget包。