2015-12-14 2 views
0

У меня есть класс UserFactory, где я хочу проверить, существует ли пользователь в базе данных, если он не будет создан автоматически. Но с трудностями с доступом к DbContext извне контроллера.Как получить доступ к DbContext извне контроллера?

public UserFactory(DbContextOptionsBuilder builder) 
    { 
     _dbContext = new PMSContext(builder.Options) ; 
    } 

    public User Create(WindowsIdentity currentWindowsUser) 
    { 
     User user = new User(); 
     string name = currentWindowsUser.Name.Replace("DOMAIN\\", ""); 

     PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 
     UserPrincipal ADuser = UserPrincipal.FindByIdentity(ctx, name); 

     if(ADuser != null) 
     { 
      User userInDatabase = _dbContext.Users.Where(u => u.SamAccountName == name).FirstOrDefault(); 
     } 
    } 

И чем в Startup.cs I Habe:

public Startup(IHostingEnvironment env) 
    { 
     var builder = new DbContextOptionsBuilder<PMSContext>() 
     .UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]); 
     User user = new UserFactory(builder).Create(WindowsIdentity.GetCurrent()); 
    } 

Но я получаю сообщение об ошибке:

Severity Code Description Project File Line Error CS1503 Argument 1: cannot convert from 'Microsoft.Data.Entity.Infrastructure.SqlServerDbContextOptionsBuilder' to 'Microsoft.Data.Entity.DbContextOptionsBuilder'

Является ли это правильный путь, чтобы получить доступ DbContext с внешней стороны Контроллер?

+1

Это может быть, что вы ссылаетесь 2 различных DLLs EF (т.е. один с .Net Framework и один с новым EF). – bubi

+0

Это похоже на опорную ошибку:/ –

+0

Оба класса используют Microsoft.Data.Entity – Whistler

ответ

0

Ответ был достаточно прост:

var optionsBuilder = new DbContextOptionsBuilder(); 
optionsBuilder.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]); 
var context = new PMSContext(optionsBuilder.Options); 

User user = new UserFactory(context).Create(WindowsIdentity.GetCurrent()); 
Смежные вопросы