首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带EF上下文的ASP.NET Unity.MVC DI

带EF上下文的ASP.NET Unity.MVC DI
EN

Stack Overflow用户
提问于 2016-08-11 21:33:19
回答 1查看 56关注 0票数 0

我在我的ASP.NET MVC4.6应用程序中使用了用于DI的Unity.MVC。我有一个传递给控制器的服务接口,它工作得很好。现在我想把EF上下文的一个接口传递给服务,但是我不确定该怎么做。我读到EF有这个IObjectContextAdapter,我可以将它传递给我的服务ctor,它可以工作,但是我需要从这个上下文中查询我的服务内部的实际表,但是因为它是一个IObjectContextAdapter,所以它不知道我的表。我该怎么做呢?

代码语言:javascript
复制
 public class ContactService : IContactService
    {
        //private ContactsEntities context;
        private IObjectContextAdapter context;

        // test ctor
        public ContactService(IObjectContextAdapter ctx)
        {
            context = ctx;
        }

        // prod ctor
        public ContactService()
        {
            context = new ContactsEntities();
        }

        List<Contact> GetAllContacts()
        {
            return (from c in context.ObjectContext.?? // I need to query the Contacts table that would be attached to the actual context I pass in but still keep the decoupling from using an Interface passed into the ctor

        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-11 21:40:17

IObjectContextAdapterDbContextObjectContext属性的类型。

你应该继承DbContext的子类,例如ContactsDatabaseContext

代码语言:javascript
复制
public class ContactsDatabaseContext : DbContext, IContactsDatabaseContext
{
  // ...
}

然后只需向IoC容器注册ContactsDatabaseContext即可。如下所示:

代码语言:javascript
复制
container.RegisterType<IContactsDatabaseContext, ContactsDatabaseContext>();

您的ContactsDatabaseContext类和IContactsDatabaseContext接口应该具有引用您的表的DbSet<T>类型的属性,例如:

代码语言:javascript
复制
IDbSet<BrandDb> Users { get; set; }

更新:

由于您使用的是生成的文件,因此请执行以下操作:

代码语言:javascript
复制
public partial class ContactsDatabaseContext : IContactsDatabaseContext
{
  // Expose the DbSets you want to use in your services
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38897867

复制
相关文章

相似问题

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