在构造函数之后运行几个过程

时间:2015-08-14 11:49:11

标签: c# entity-framework

我正在使用C#和Entity Framework 5.当我创建模型时,EF5会生成几个类,例如用户的类

def edit
  @user = User.find(params[:id])
  @relationships = @user.relationships.where('member = ?', true)
end

def update
  @user = User.find(params[:id])
  if @user.update_attributes(strong_params)
    flash[:success] = "Updated"
    redirect_to @user
  else
    render 'edit'
  end
end

每次修改模型时都会自动生成此类,然后创建另一个类,如

public class User{}

添加多个功能,属性或程序。我的问题是我需要在实例化类时运行一个过程。

我想像

public partial class User{}

并在构造函数完成时自动调用public class User { public User(){ } } public partial class User() { public void OtherProc(){} }

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您应该使用ObjectContext.ObjectMaterialized事件在实体创建后执行代码。但它只有在从数据库加载对象时才会起作用。因此,完整的解决方案应包括处理实体初始化操作的某种业务逻辑层。这是一个片段:

AdventureWorks2012Entities context = new AdventureWorks2012Entities();
((IObjectContextAdapter)context).ObjectContext.ObjectMaterialized += (sender, e) => 
{
    //will fire for newly loaded entities
    if (e.Entity is User)
        InitNewUser((User)e.Entity);
};

...

//ObjectMaterialized won't fire when you create the object
context.Person.Add(InitNewUser(new User()));

您的初始化代码:

private static User InitNewUser(User user)
{
    //Your initialization code
    user.OtherProc();
    return user;
}