我的代码如下。
public void CreateNewAuthor(List<Author> newAuthor)
{
publishContext.AddToAuthors(newAuthor);
}
我知道这会导致错误,因为当我传递List&lt;&gt;时,AddToAuthors(作者newAuthor)接受实体对象作为参数。那应该如何处理呢?如何投射列表&lt;&gt;到AddToAuthors()之前的实体对象?
答案 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.您知道该列表只包含一个项目:
将方法的签名更改为以下内容:
public void CreateNewAuthor(Author newAuthor)
(引用名称不是复数的项目列表是非常不直观的。你的方法接受一个(即“几个”)Author
个对象的列表更不直观,但要求列表只包含一个项目。)
然后,按如下方式调用您的方法:
// using System.Linq;
// List<Author> someListOfAuthors = new List<Author> { someAuthor };
CreateNewAuthor( someListOfAuthors.Single() );
或者,不使用LINQ:
CreateNewAuthor( someListOfAuthors[0] );
案例2.该列表可能包含任意数量的项目:
将参数从newAuthor
重命名为newAuthors
,原因与上述相同。
将您的方法正文更改为:
foreach (Author author in newAuthors)
{
publishContext.AddToAuthors(author);
}