我一直在运行一种模式,我希望从实体集合(EF4)中选择行,并使用这些数据在不同的实体集合中创建新行。
我发现这样做的唯一方法是执行以下步骤:
var newEntities = (from e in myentities
where e.x == y
select new {
Prop1 = e.Prop1,
Prop2 = e.Prop2+e.Prop3,
Prop3 = DateTime.Now,
Prop4 = "Hardcodedstring"}
)
.AsEnumerable()
.Select(n=>new OtherEntity{
Prop1 = n.Prop1,
Prop2 = n.Prop2,
Prop3 = n.Prop3,
Prop4 = n.Prop4}
);
//insert into database and save
如果我尝试在select中创建一个新的OtherEntity,那么我会得到一个EF异常。
这是唯一的出路吗?使整个事情非常麻烦,似乎完全浪费了击键?
答案 0 :(得分:1)
我建议使用Automapper将您的实体映射到域对象,而不是从linq查询中进行映射。
答案 1 :(得分:1)
不,这是唯一的方法。 在运行AsEnumerable,ToList等之前,您可以调用的唯一方法是由Entity Framework映射到SQL语法的方法。 由于OtherEntity的构造函数未映射到任何东西,因此无法在实体上下文中调用它。
答案 2 :(得分:0)
我最喜欢的解决方案是创建一个Convertor
类,它接受Source
参数(列表或单个对象)并传输它(创建新实例并为其赋值< / em>)到destination class type
List<OtherEntity> lst = Convertor.ConvertToOtherEntity(newEntities );