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包。