【发布时间】:2016-06-28 18:59:06
【问题描述】:
我目前正在使用 EF 6 Code First 构建一个 RestAPI,我有几个模型有一些关系。
我已经成功地添加了项目和所有这些,但现在我正在构建一个“更新”功能,但进展并不顺利。
我目前得到了这段代码,它确实更新了行,但是在具有关系的列上它只是添加新行而不是使用现有的...
数据库控制器
public void UpdateDatabase(int id, DatabaseItem db)
{
using (var databasesCtx = new DatabaseContext())
{
DatabaseItem existing = databasesCtx.Databases.Include(a => a.Subjects).Include(a => a.Types).FirstOrDefault(d => d.Id == id);
if(existing != null)
{
List<DatabaseSubject> subjects = GetAllSubjects();
List<DatabaseType> types = GetAllTypes();
db.Subjects = subjects.Where(s => db.Subjects.Select(b => b.Id).ToList().Contains(s.Id)).ToList();
db.Types = types.Where(t => db.Types.Select(b => b.Id).ToList().Contains(t.Id)).ToList();
databasesCtx.Entry(existing).CurrentValues.SetValues(db);
databasesCtx.SaveChanges();
}
}
}
DatabaseItem - 类
public class DatabaseItem
{
public int Id { get; set; }
public virtual ICollection<DatabaseSubject> Subjects { get; set; }
public byte[] Icon { get; set; }
public virtual ICollection<DatabaseType> Types { get; set; }
public string Description { get; set; }
[Required]
public Boolean Public { get; set; }
}
DatabaseSubject - 类
public class DatabaseSubject
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<DatabaseItem> Databases { get; set; }
}
DatabaseType - 类
public class DatabaseType
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<DatabaseItem> Databases { get; set; }
}
【问题讨论】:
-
GetAllSubjects 和 GetAllTypes 方法是什么样的?
-
它可能需要更正您的导航属性。
标签: c# entity-framework entity-framework-6 asp.net-web-api2