[英]Entity Framework not persisting complex entity changes on SaveChanges
[英]Persisting Changes Made in WPF with Entity Framework
我遇到了一个问题,即实体框架无法持久保存对数据库的更改。 我使用静态方法加载一些值,并且Entity上下文被丢弃(在using语句中)。
然后将对象加载到WPF DataGrid中,最终用户可以在其中操作它们。
当用户完成更改后,将按下“更新”按钮,并将对象列表发送回数据层,以保留到数据库中。 我可以看到在UI中更改的对象反映了它们的新值(即,不是数据绑定问题)。
我假设由于加载对象的实体上下文已经被丢弃,因此我应该将这些对象附加到新创建的上下文中。 正确? 当我这样做时,修改后的对象的实体状态(我可以看到状态设置为该状态)更改为“未更改”。 什么都不会保留到数据库。
我到底想念什么?
这是加载和更新值的代码:
public static List<SSIS_Configuration> GetConfigurationValuesForTenant(string tenantKey, SqlConnectionString connectionString)
{
List<SSIS_Configuration> configStrings = new List<SSIS_Configuration>();
if (connectionString.IsValid())
{
try
{
using (SSISFrameworkEntities entities = new SSISFrameworkEntities(connectionString.ToEDMXString("SSISFramework.SSISFramework")))
{
string configFilterStartingValue = "CommonConfig_" + tenantKey;
configStrings = (from configString in entities.SSIS_Configurations
where configString.ConfigurationFilter.StartsWith(configFilterStartingValue)
select configString).ToList();
}
}
catch { }
}
return configStrings;
}
public static void UpdateConfigurations(List<SSIS_Configuration> configurations, SqlConnectionString connectionString)
{
if (connectionString.IsValid())
{
try
{
using (SSISFrameworkEntities entities = new SSISFrameworkEntities(connectionString.ToEDMXString("SSISFramework.SSISFramework")))
{
foreach (SSIS_Configuration config in configurations)
{
entities.Attach(config);
}
entities.SaveChanges();
}
}
catch { }
}
}
WPF应用程序是附加实体的方案,因此,如果要更改从上下文加载的实体,则不应处置上下文。 如果要处置它,则必须实现许多其他逻辑,因为必须将用户对实体和关系所做的每项更改告知新的上下文。
因此,在您的方案中,调用Attach将仅将实体连接到上下文,但是您还需要设置它们的状态 (将放置的实体附加为Unchanged
状态)。 请注意,必须根据要执行的操作将状态正确设置为“ Deleted
Modified
,“ Deleted
或“ Inserted
。 如果您更改的实体具有某些也已更改的关系,则还必须为相关实体设置状态,如果实体之间的关系发生更改,则也必须更改关系本身的状态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.