Почему вы создаете новый объект Account в select, а не просто позволяете LINQ-> SQL его обрабатывать? Если вы позволяете платформе выбрать объект, она должна правильно установить EntityRef для свойства, и ассоциация должна работать.
using (var context = new SalesLogixDataClassesDataContext())
{
var query = context.ACCOUNTs
.Where(a => a.ACCOUNTID == id);
return query.FirstOrDefault();
}
Просто Edit, если вы выбираете изменить имена свойств из сгенерированных имен, вы также можете сделать это через конструктор DBML, так что объект, который вы получаете, является дружественным, но сохраняет связь с таблицей через фактические имена столбцов.
После повторного просмотра вашего кода (извините, я неправильно прочитал настройку сущности), я удалил недействительный текст из исходного ответа.
Ниже приведен пример XML-кода о том, как вы можете сделать объекты вашей модели более дружественными, а не переводить их вручную в свои запросы.
<Table Name="dbo.ACCOUNT" Member="Accounts">
<Type Name="Account">
<Column Name="ACCOUNTID" Member="AccountId" Type="System.Int32" DbType="Int NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
<Column Name="ACCOUNT1" Member="AccountName" Type="System.String" DbType="VarChar(...) NOT NULL" CanBeNull="false" />
<Association Name="Address_Account" Member="Address" ThisKey="ThisTablesFKIDToAddress" OtherKey="AddressTablePKID" Type="Address" IsForeignKey="true" />
</Type>
</Table>
Вы можете сделать это через конструктор, который будет намного проще, а также сделает работу с вашим адресным объектом более приятной.
В любом случае, я надеюсь, что все это поможет, я не могу точно сказать, что происходит с настройкой сущности, если вы хотите опубликовать код для объекта учетной записи, это может помочь, но это даст нам куда-то пойти здесь.
Конечно, если бы вы изменили ваш смоделированный объект, код выбора выглядел бы так:
using (var context = new SalesLogixDataClassesDataContext())
{
return context.Accounts.FirstOrDefault(account => account.AccountId == id);
}