Не могу создать instace из DBContext - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть модель:

public class Department
{
    public int DepartmentID { get; set; }
    [Required]
    [UniqueDepartmentName]
    public string Name { get; set; }
    public List<Person> Persons { get; set; }
}

И DBcontext:

public class InstituteContext : DbContext
{
    public InstituteContext (DbContextOptions<InstituteContext> options)
        : base(options)
    {
    }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Department>().HasIndex(p => p.Name).IsUnique();
    }
    public DbSet<Institute.Models.Department> Department { get; set; }
}

Как вы видите свойство "ИМЯ", я делаю уникальным.Для проверки я создаю Мой атрибут проверки:

 public class UniqueDepartmentName : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        var db = new InstituteContext();
    }
}

Но я не могу создать экземпляр InstituteContext, потому что конструктору нужны параметры.Как я могу создать экземпляр InstituteContext?Или что я должен передать конструктору в параметрах?

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Ваш метод DbContextOptions находится не в том месте, ваш конструктор может быть пустым, и вам нужно добавить метод OnConfiguring, который получает DbContextOptions. Что-то вроде:

public DbSet<Department> Department { get; private set; }

protected override void OnConfiguring(DbContextOptionsBuilder options) {
    // In my case I'm passing the connection string in this method below
    options.UseSqlServer("Data Source=DATABASEIP;Initial Catalog=DATABASETABLE;" +
        "User ID=USER;Password=PASSWORD");
}
0 голосов
/ 18 ноября 2018

Попробуйте это:

public class UniqueDepartmentName : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        var connectionString = "Your ConnectionString"
        var options = new DbContextOptionsBuilder<InstituteContext>()
                         .UseSqlServer(new SqlConnection(connectionString)).Options;

        using (var dbContext = new BloggingContext(options))
        {
           // Do necessary staffs here with dbContext
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...