Странная ошибка «сборка не указана» при попытке вызвать допустимую перегрузку метода
Я использую метод перегрузки в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 B
VS выдает следующую ошибку во время компиляции:
Тип '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.