Мне действительно нравится Hafthor сообщение в блоге , и добавить мои два цента к этому обсуждению, я хотел бы сказать, что, для меня всегда было легко иметь бросок СЛОЯ ДАННЫХ только один тип исключения (DataAccessException). Таким образом, моя БИЗНЕС-LAYER знает, какое исключение ожидать и ловит его. Затем в зависимости от дальнейших бизнес-правил (т.е. если мой бизнес-объект участвует в рабочем процессе и т.д.), я могу выдать новое исключение (BusinessObjectException) или продолжить двигаться без ре/броска.
я сказал бы, используйте попытку.. поймайте каждый раз, когда это необходимо, и используйте его мудро!
, Например, этот метод участвует в рабочем процессе...
Комментарии?
public bool DeleteGallery(int id)
{
try
{
using (var transaction = new DbTransactionManager())
{
try
{
transaction.BeginTransaction();
_galleryRepository.DeleteGallery(id, transaction);
_galleryRepository.DeletePictures(id, transaction);
FileManager.DeleteAll(id);
transaction.Commit();
}
catch (DataAccessException ex)
{
Logger.Log(ex);
transaction.Rollback();
throw new BusinessObjectException("Cannot delete gallery. Ensure business rules and try again.", ex);
}
}
}
catch (DbTransactionException ex)
{
Logger.Log(ex);
throw new BusinessObjectException("Cannot delete gallery.", ex);
}
return true;
}
Хорошо, я нашел ответ. Вы можете установить debug = "false" для оптимизации, а затем установить compilerOptions = "/ debug: pdbonly" в настройках компилятора system.codedom для получения символов. Вот соответствующие отрывки из файла web.config:
<system.web>
....
<compilation debug="false" defaultLanguage="c#">
...
</compilation>
</system.web>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" warningLevel="4"
type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
compilerOptions="/debug:pdbonly">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
...
</compilers>
</system.codedom>
Если я не упускаю чего-то, разница между отладкой и выпуском сборки заключается в оптимизации. Вы должны иметь возможность создать нормальный двоичный файл отладки с помощью pdb и обязательно включить все параметры оптимизации в настройках проекта. Afaik, если нет исключения, файл pdb будет загружен и т. Д.