实体框架功能导入:输入参数映射

时间:2010-08-28 18:33:03

标签: .net entity-framework c#-4.0 entity-framework-4 entity

实体框架允许轻松地将存储过程的结果映射到实体。我需要的是将实体映射到输入参数,以便代替

context.SaveUser( user.FirstName, user.LastName, ... );

我可以简单地称之为:

context.SaveUser( user );

我真正想要的是尽可能地隔离可能的架构更改。我只使用EF来生成实体和函数导入;与DB的整个交互是通过函数调用执行的。因此,每当User表发生更改时,我都希望在可视化设计器中重新生成User实体并根据需要更改业务逻辑代码;我不想更改数据访问层。目前,我没有看到任何关于从数据访问层到EF的属性集依赖调用(就像我上面发布的那样),这是一种耻辱,因为这些可以很容易地与实体类一起重新生成。

还有其他策略可以让我达到同样的目标吗?我使用这些存储过程的原因实际上是因为我想要完全控制SQL(也许我只是偏执狂,但是最终需要很少或根本没有控制实际的LINQ代码是有点可怕的SQL)。

这样的事情可能吗?

谢谢

2 个答案:

答案 0 :(得分:0)

如果没有一些额外的样板代码,我认为不可能。

也许您应该重新考虑当前的访问策略,而不是使用存储过程。然后你就可以像想要的那样去做。

答案 1 :(得分:0)

这是可能的,但与您尝试实现它的方式不同。每个实体都允许将Insert,Update和Delete操作映射到存储过程。因此,在您的情况下,我假设您需要为InsertUup存储过程创建插入和更新操作的映射。完成映射时,每次在实体集中添加或更新实体时都会在内部调用存储过程,并请求SaveChanges。因此,您将使用与没有存储过程相同的方式使用实体集。在MSDN上查看这些文章:How toWalkthrough

修改

尝试使用上述方法并以这种方式保存更改:

var user = new User();
FillUser(user); // fill modified data to user entity

using (var context = new MyContext())
{
  context.Users.Attach(user);
  context.ObjectStateManager.ChangeObjectState(user, EntityState.Modified);
  context.SaveChanges(); // This should call your Update stored procedure
}