我正在使用EF 6.1.0并且正在创建WCF服务。
首先,我创建了一个包含我的实体,Mappers和Context的类库,用于初始化EF。 我还创建了一个包含上下文实例化的类,并使用以下代码:
public IQueryable<[Entity]> GetAll()
{
return context.[Entity].AsQueryable();
}
另一方面,我在同一个项目上创建了一个WCF服务,并在.svc文件中调用函数GetAll(),如下所示:
public List<[Entity]> GetList()
{
[iObject] repository = new [Object](new Context());
return repository.GetAll().ToList();
}
该项目正在建设中。我甚至检查了配置,它位于正确的数据库中。但是,假设创建的数据库和表格不存在,并且错误&#34;序列不包含匹配元素&#34;出现在回报中。
如果这个令人困惑,您可以使用Code First Entity Framework向我指出WCF服务的一些链接。
答案 0 :(得分:60)
我有一个错误,我收到System.InvalidOperationException
消息Sequence contains no matching element
,因为我的表配置中传递给.HasColumnType()
的字符串值不正确。
答案 1 :(得分:10)
我刚遇到同样的问题。 Code First from database向导生成了一个列[Column(TypeName = "date")]
。
致电.saveChanges()
会产生Sequence contains no elements
。
将定义的列更改为[DataType(DataType.DateTime)]
后,它按预期工作。
答案 2 :(得分:5)
添加迁移或更新数据库时,我也遇到了同样的错误。
原因是我使用了错误的列类型
[Column("ImageType", TypeName = "varchar(20)")]
public string ImageType
{
get;
set;
}
但是当我从varchar中删除20时,它开始为我工作
[Column("ImageType", TypeName = "varchar")]
public string ImageType
{
get;
set;
}
答案 3 :(得分:2)
对我来说,这条消息是因为对Column属性中TypeName的误解。
列属性:[列(字符串名称,属性:[Order = int],[TypeName = string])
name:db表中列的名称。
顺序:列的顺序,从零索引开始。 (可选)
TypeName:列的数据类型。 (可选)
此TypeName必须只是该类型的名称,并且不得包含精度或比例或长度以及任何其他内容。例如,以下将导致错误
[Column(TypeName =“nvarchar(600)”)]
虽然低于一个可以正常工作但是你可能想要具有特定大小的列,并且对于那种方式是使用流畅的API
[Column(TypeName =“nvarchar”)]
答案 4 :(得分:1)
如果列类型无效,则实体框架会抛出此异常。例如:
// 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; }
请参阅以下示例:
答案 5 :(得分:1)
烨。也抓住了我,因为在分散注意力的那一刻,我把 bigint 列中的文字 long 放在那里
即HasColumnType("long")
- 你能相信吗?!多么小丑!
生成器通常会正确地创建您的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上查找它,这样可以节省时间......
答案 6 :(得分:0)
当我将我的会员模型重命名为Student时,我收到了相同的错误消息,并且我在其他类中有一个导航属性:
public IList<Student> Members { get; set; }
我把它改为:
public IList<Student> Students { get; set; }
问题解决了!
答案 7 :(得分:0)
在使用Fluent API定义Table-Per-Type继承时(作为从EntityTypeConfiguration<T>
派生的类),并且错误地重新定义了已经在基类配置中定义的字段,我得到了这个错误(两者完全相同) 。我正在使用EntityFramework 6.2.0 nuget包。
答案 8 :(得分:0)
之所以被这个问题困扰,是因为我引用了reference属性而不是Id属性。
var t = modelBuilder.Entity<CyDocument>();
t.HasIndex(b => b.DocTypeId);
答案 9 :(得分:-1)
对我来说,当将班级项目转换为设置为启动项目
时,它会有所帮助