Я все это время чесал голову за этим утром, но все еще не мог понять, что может быть причиной этого.
У меня есть составной объект репозитория, который ссылается на два других репозитория. Я пытаюсь создать экземпляр типа Model в своем запросе LINQ (см. Первый фрагмент кода).
public class SqlCommunityRepository : ICommunityRepository
{</p>
<pre><code> private WebDataContext _ctx;
private IMarketRepository _marketRepository;
private IStateRepository _stateRepository;
public SqlCommunityRepository(WebDataContext ctx, IStateRepository stateRepository, IMarketRepository marketRepository)
{
_ctx = ctx;
_stateRepository = stateRepository;
_marketRepository = marketRepository;
}
public IQueryable<Model.Community> Communities
{
get
{
return (from comm in _ctx.Communities
select new Model.Community
{
CommunityId = comm.CommunityId,
CommunityName = comm.CommunityName,
City = comm.City,
PostalCode = comm.PostalCode,
Market = _marketRepository.GetMarket(comm.MarketId),
State = _stateRepository.GetState(comm.State)
}
);
}
}
}
Объекты репозитория, которые я передаю, выглядят так
public class SqlStateRepository : IStateRepository
{</p>
<p>private WebDataContext _ctx;</p>
<p>public SqlStateRepository(WebDataContext ctx)
{
_ctx = ctx;
}</p>
<pre><code> public IQueryable<Model.State> States
{
get
{
return from state in _ctx.States
select new Model.State()
{
StateId = state.StateId,
StateName = state.StateName
};
}
}
public Model.State GetState(string stateName)
{
var s = (from state in States
where state.StateName.ToLower() == stateName
select state).FirstOrDefault();
return new Model.State()
{
StateId = s.StateId,
StateName = s.StateName
};
}
И
public class SqlMarketRepository : IMarketRepository
{</p>
<p>private WebDataContext _ctx;</p>
<pre><code> public SqlMarketRepository(WebDataContext ctx)
{
_ctx = ctx;
}
public IQueryable<Model.Market> Markets
{
get
{
return from market in _ctx.Markets
select new Model.Market()
{
MarketId = market.MarketId,
MarketName = market.MarketName,
StateId = market.StateId
};
}
}
public Model.Market GetMarket(int marketId)
{
return (from market in Markets
where market.MarketId == marketId
select market).FirstOrDefault();
}
}
Вот как я все это делаю:
WebDataContext ctx = new WebDataContext();
IMarketRepository mr = new SqlMarketRepository(ctx);
IStateRepository sr = new SqlStateRepository(ctx);
ICommunityRepository cr = new SqlCommunityRepository(ctx, sr, mr);
int commCount = cr.Communities.Count();
Последняя строка в вышеприведенном фрагменте - это место, где он терпит неудачу. Когда я выполняю отладку через экземпляр (new Model.Community), он никогда не входит ни в один из других методов хранилища. У меня нет взаимосвязи между базовыми таблицами за этими тремя объектами. Может ли это быть причиной того, что LINQ to SQL не может правильно построить дерево выражений?