从List <entityobject>转换为EntityObject </entityobject>

时间:2011-10-07 09:48:44

标签: c# entity-framework

我的代码如下。

public void CreateNewAuthor(List<Author> newAuthor)
{
    publishContext.AddToAuthors(newAuthor);
}

我知道这会导致错误,因为当我传递List&lt;&gt;时,AddToAuthors(作者newAuthor)接受实体对象作为参数。那应该如何处理呢?如何投射列表&lt;&gt;到AddToAuthors()之前的实体对象?

3 个答案:

答案 0 :(得分:2)

您接受多个作者 - 但您正在尝试调用带有单个作者的内容。您期望列表中有多个值,还是只有一个值?

听起来你可能只想循环:

public void CreateNewAuthor(List<Author> newAuthors)
{
    foreach (Author newAuthor in newAuthors)
    {
        publishContext.AddToAuthors(newAuthor);
    }
}

...或者完全有可能上下文已经提供了一次添加多个作者的方法。 (我不是EF的人,所以我不确定。)

重要的是你了解这里的可能性 - 列表中不能包含任何作者,一位作者或多位作者。所有这些都在您的代码中有效吗?你想如何处理这些情况?

答案 1 :(得分:1)

您可以浏览列表并添加此列表包含的所有Author对象:

foreach (Author author in newAuthor)
{
    publishContext.AddToAuthors(author);
}

答案 2 :(得分:1)

案例1.您知道该列表只包含一个项目:

  1. 将方法的签名更改为以下内容:

    public void CreateNewAuthor(Author newAuthor)
    

    (引用名称不是复数的项目列表是非常不直观的。你的方法接受一个(即“几个”)Author个对象的列表更不直观,但要求列表只包含一个项目。)

  2. 然后,按如下方式调用您的方法:

    // using System.Linq;
    // List<Author> someListOfAuthors = new List<Author> { someAuthor };
    CreateNewAuthor( someListOfAuthors.Single() );
    

    或者,不使用LINQ:

    CreateNewAuthor( someListOfAuthors[0] );
    
  3. 案例2.该列表可能包含任意数量的项目:

    1. 将参数从newAuthor重命名为newAuthors,原因与上述相同。

    2. 将您的方法正文更改为:

      foreach (Author author in newAuthors)
      {
          publishContext.AddToAuthors(author);
      }