Sequence不包含匹配元素 - EntityFramework

时间:2014-04-10 08:32:01

标签: c# wcf entity-framework ef-code-first wcf-data-services

我正在使用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服务的一些链接。

10 个答案:

答案 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)

对我来说,当将班级项目转换为设置为启动项目

时,它会有所帮助