Здравствуйте! Не могу найти в чем причина проблемы...
1)Создадим в дизайнере простую таблицу, исходный dbml-файл выглядит следующим образом:
1.
2.
3.
4.
5.
6.
7.
8.
9.
<?xml version="1.0" encoding="utf-8"?><Database Name="Northwind" Class="TesterDataContext" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007">
<Connection Mode="AppSettings" ConnectionString="Data Source=DAVINCI\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True" SettingsObjectName="ConsoleUtils.Properties.Settings" SettingsPropertyName="NorthwindConnectionString1" Provider="System.Data.SqlClient" />
<Table Name="dbo.Workers" Member="Workers">
<Type Name="Worker">
<Column Name="WorkerId" AutoSync="Never" Type="System.Guid" IsReadOnly="true" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
<Column Name="Name" Type="System.String" DbType="nvarchar(10) NOT NULL" CanBeNull="false" />
<Column Name="Desc" Type="System.String" DbType="nvarchar(10) NOT NULL" CanBeNull="false" />
</Type>
</Table>
</Database>
2)Создадим некоторый абстрактный класс, содержащий несколько индексаторов:
1.
2.
3.
4.
public abstract class WorkerBase
{
public abstract Object this[string name] { get; set; }
public abstract Object this[object index] { get; set; }
}
3)Созданный дизайнером сущностный класс унаследуем от данного абстрактного класса
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
partial class Worker : WorkerBase
{
public override object this[string name]
{
get
{
//...
}
set
{
//...
}
}
public override object this[object index]
{
get
{
//...
}
set
{
//...
}
}
}
4) Попытаемся сделать обычную выборку из этой таблицы:
1.
2.
3.
4.
5.
6.
static void Main(string[] args)
{
TesterDataContext dc = new TesterDataContext(@"Data Source=DAVINCI\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True");
var data = from w in dc.Workers select w;
...
}
5)В результате получаем исключение в следующем месте в коде контекста данных:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
[global::System.Data.Linq.Mapping.DatabaseAttribute(Name="Northwind")]
public partial class TesterDataContext : System.Data.Linq.DataContext
{
...
public System.Data.Linq.Table<Worker> Workers
{
get
{
return this.GetTable<Worker>(); //Ошибка здесь!!!
//Ambiguous match found.
}
}
}
Если оставить только один индексатор (любой), никаких исключений нет...