使用实体框架

时间:2016-04-25 12:37:40

标签: c# entity-framework

当模型加载实体框架时,我想在模型中注入一些东西。

考虑以下用户模型。我希望实体框架在进行context.Users.Where(somequery)执行时,将SomeReference注入每个从数据库加载的用户。

public class User {

    public string Username {get; set;}

    public User(SomeReference ref)
    {
    }

}

我可以在哪里注册?

2 个答案:

答案 0 :(得分:2)

您可以尝试在DbContext构造函数

中添加类似的内容
((IObjectContextAdapter)this).ObjectContext.ObjectMaterialized += 
(sender, args) =>
    {
    var user = args.Entity as User;
    if (user != null)
        user.SomeReference = ref;
    };

我想下一步就是依靠某种工厂来检索变量ref的各种值

答案 1 :(得分:1)

实体框架只能在从DB中获取项目时使用无参数构造函数,所以我担心这是不可能的,至少不是直接的。我要做的是将默认构造函数设为私有,并创建一个新的构造函数,该构造函数需要UserSomeReference

public class User 
{
   private User() {}
   public User(User user, SomeReference ref)
   {
      ...
   }
}

然后在从数据库中提取数据后,您可以在Select中使用此构造函数:

var result = db.Users.AsEnumerable().Select(u => new User(u, myRef)).ToList();

请注意AsEnumerable()调用,因为您会收到有关构造函数的错误,因为它无法转换为SQL。请执行请记住,将默认构造函数设为私有disables proxy creation,这样您就无法再使用延迟加载/自动更改跟踪了。如果您需要它,您必须公开构造函数。