首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用实体框架向模型中注入某些内容

用实体框架向模型中注入某些内容
EN

Stack Overflow用户
提问于 2016-04-25 12:37:40
回答 2查看 68关注 0票数 4

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

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

代码语言:javascript
运行
复制
public class User {

    public string Username {get; set;}

    public User(SomeReference ref)
    {
    }

}

我可以在哪里登记呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-25 14:27:38

您可以尝试在DbContext构造函数中添加类似的内容

代码语言:javascript
运行
复制
((IObjectContextAdapter)this).ObjectContext.ObjectMaterialized += 
(sender, args) =>
    {
    var user = args.Entity as User;
    if (user != null)
        user.SomeReference = ref;
    };

我想下一步将是依赖于某种工厂来检索变量ref的各种值。

票数 2
EN

Stack Overflow用户

发布于 2016-04-25 12:57:53

实体框架只能在从DB获取项时使用无参数构造函数,因此恐怕这是不可能的,至少不能直接使用。我要做的是使默认构造函数是私有的,并创建一个接受UserSomeReference的新构造函数。

代码语言:javascript
运行
复制
public class User 
{
   private User() {}
   public User(User user, SomeReference ref)
   {
      ...
   }
}

然后,在从数据库中获取数据之后,可以在Select中使用此构造函数。

代码语言:javascript
运行
复制
var result = db.Users.AsEnumerable().Select(u => new User(u, myRef)).ToList();

注意AsEnumerable()调用,因为您将得到一个关于构造函数的错误,因为它不能被转换为SQL。请do记住,将默认构造函数设置为私有禁用代理创建,这样就不能再使用延迟加载/自动更改跟踪了。如果需要,就必须公开构造函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36840810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档