【发布时间】:2016-03-16 07:55:47
【问题描述】:
我有以下功能:
public IEnumerable<Task> AddTasks(IEnumerable<Task> tasks)
{
foreach (Task task in tasks)
{
Db.Tasks.Add(task);
}
Db.SaveChanges();
return tasks;
}
我需要在这个函数中插入多个对象。但是当返回任务时,对象与我发送时相同,TaskID(身份)的值仍然为0。
我在 savechanges 之后尝试了这个,但它崩溃了:
//Revive object
foreach (Task task in tasks)
{
Db.Entry(task).GetDatabaseValues();
}
我怎样才能获得这些物品的身份?
编辑:
public partial class Task
{
public int TaskID { get; set; }
public int ProjectID { get; set; }
public bool IsActive { get; set; }
public System.DateTime CreatedDate { get; set; }
}
public void AddTasksUsingViewModels(IEnumerable<TaskVM> taskVms)
{
IEnumerable<Task> tasksToAdd = taskVms.Select
(
t =>
new Task
{
ProjectID = taskVm.ProjectID,
IsActive = true,
CreatedDate = DateTime.Now
}
);
IEnumerable<Task> entityList = AddTasks(tasksToAdd);
}
【问题讨论】:
-
你的TaskID是什么类型的?整数,GUID?
-
请出示您的任务类声明。
-
在调用 SaveChanges 后尝试使用 StoreWins 值调用 RefreshMode 方法
-
你的Task的映射逻辑是什么,如果它是一个身份字段,我假设它是自动递增的。不确定您使用的是哪个版本的 EF,但根据我以前的经验,您不需要在某个地方将 EntityState 设置为 Add 吗?否则,它们将被视为相同。有不同的框架可以自动完成,但也许新的 EF 不必再这样做了……
标签: c# entity-framework linq identity