c# - 实体框架 - 将一个类的记录插入另一个“相同”对象
问题描述
使用数据库优先实体框架。将记录插入我的一张表中,完全没有问题。然后我发现在某些非常罕见的情况下,我得到了重复的记录,这实际上是可以的。所以我处理这些问题的计划是创建一个相同的表,捕获异常,将副本放在同一个表中,并在稍后的某个阶段对其进行检查。
但是,我天真地认为它们是相同的表,我可以将我已经创建的对象插入到另一个“错误”表中,这显然是我做不到的(“无法从 'original_class' 转换为 'new_class'”) ,我理解。
那么有没有更好的方法来做我想要实现的目标,或者有没有一种简单的方法可以将我的“original_class”转换为我的“new_class”,因为它们是完全相同的?
***编辑认为为了清楚起见添加一些代码可能是有益的(不是我的实际代码,只是我想要实现的目标的表示)
我的交易类
public partial class Tran
{
public string tranDescription
}
我的交易错误类
public partial class TranError
{
public string tranDescription
}
我如何尝试处理错误
using(var db = new tranEntities())
{
Tran t = new Tran();
t.tranDescription = @"Some Description";
try
{
db.Trans.Add(t);
}
catch (System.Data.Entity.Infrastructure.DbUpdateException)
{
db.TransError.Add(t);
}
}
我只是在飞行中输入的,所以请原谅任何拼写错误,我想你明白了。
解决方案
Tomislav 的答案的替代方案,如果您的项目使用 JSON,您可以使用 JSON 序列化切换相同的类型:
public static class SwapperExtensions
{
public static T2 Swap<T1,T2>(this T1 original) where T1:class where T2:class,new()
{
if (original == null)
return null;
try
{
var result = JsonConvert.SerializeObject(original);
var newObject = JsonConvert.DeserializeObject<T2>(result);
return newObject;
}
catch(Exception ex)
{
throw new ArgumentException("The provided types could not be swapped. See inner exception for details.", ex);
}
}
}
然后看起来像:
var tran = new Tran { TranDescription = "Some description." };
// do stuff...
var tranError = tran.Swap<Tran, TranError>();
显然,如果使用不兼容的类型调用它,则在执行此类操作时需要防止异常。:)
推荐阅读
- python - Sklearn Column Transformer ValueError:无法将字符串转换为浮点数:
- wordpress - 如何更改 wordpress 文本
- python - 如何比较 DataFrame 中的各种特定单元格(以相对方式)?
- java - 在 Account Manager 中为 Auth Token 创建实时数据
- google-visualization - 谷歌图表垂直标签
- c# - 通过 HTML 表格中的相应列文本访问单元格
- android - getFloatExtra() 总是返回默认值
- node.js - passport.js 不填充登录/注册数据
- c - 为什么C语言中有NULL?
- ios - 将自定义视图设置为 UIViewController 的视图会显示一个带有约束警告的空白视图:“{my base view} 的位置和大小不明确”