Странная ошибка «сборка не указана» при попытке вызвать допустимую перегрузку метода

Я использую метод перегрузки вAssembly A:

public static int GetPersonId(EntityDataContext context, string name)
{
    var id = from ... in context... where ... select ...;
    return id.First(); 
}

public static int GetPersonId(SqlConnection connection, string name)
{
    using (var context = new EntityDataContext(connection, false))
    {
        return GetPersonId(context, name);
    }
}

Когда я пытаюсь вызвать вторую перегрузку изAssembly BVS выдает следующую ошибку во время компиляции:

Тип 'System.Data.Entity.DbContext' определен в сборке, на которую нет ссылок. Вы должны добавить ссылку на сборку EntityFramework, Version = 6.0.0.0, Culture = нейтральный, PublicKeyToken = ... '.

Assembly B РекомендацииAssembly A, Entity Framework упоминается только вAssembly A какAssembly B не использует это Звонок отAssembly B выглядит так:

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();                               
    var id = AssemblyA.GetPersonId(connection, name); // compiler error
    ...
}  

Что я не понимаю, так этоошибка исчезнет, ​​если я поменяю сигнатуру метода вAssembly A например:

public static int GetPersonId(SqlConnection connection, string name, bool empty)

и измените вызов на:

var id = AssemblyA.GetPersonId(connection, name, true); // no error

Почему мой код не компилируется в первом случае? Похоже, что это не связано с Entity Framework, как указывает ошибка. Я всегда думал, что C # допускает перегрузку методов, когда сигнатуры методов отличаются только типами параметров. Например. Я могу запустить следующий код без проблем, как ожидалось:

static void DoStuff(int a, int b) { ... }
static void DoStuff(int a, float b) { ... }

DoStuff(10, 5);
DoStuff(10, 5.0f);

Итак, почему я получаю ошибку в моей ситуации, несмотря на явно допустимые перегрузки?

Обратите внимание, что изAssembly B У меня нет проблем с вызовом других методов, которые внутренне используютEntityDataContextЕдинственное отличие состоит в том, что эти методы не имеют перегрузок.

Фон

EntityDataContext наследует EF'sDbContext:

public partial class EntityDataContext : DbContext
{
        public EntityDataContext() : base("name=EntityDataContext") { }

        public EntityDataContext(DbConnection connection, bool contextOwnsConnection) 
            : base(connection, contextOwnsConnection) { }

        ...
}

Сначала я использую .NET 4.0 с кодом EF 6 для существующей базы данных с добавлением некоторых пользовательских перегрузок ctor.

Ответы на вопрос(1)

Ваш ответ на вопрос