Привязка параметров запроса по имени с ODP.NET

Я поддерживаю фиксацию папки .idea (исключая workspace.xml и tasks.xml). Но я начинаю приходить к выводу, что файлы .iml следует игнорировать.

Вот проблема:

Откройте проект в каталоге с именем «foo», например, и вы получите foo.iml, и все это выглядит хорошо. Проблема в том, что если я просто переименую каталог в foo2 (или клонирую его в другое имя каталога) при попытке открыть проект в Android Studio, вы получите три вещи:

  • Новый файл iml named foo2.iml
  • Файл iml для вашего проекта Android будет изменен и теперь будет указывать на foo2, так как его родитель
  • .idea / modules.xml будет иметь строку, добавленную для foo2.iml, так что в нем есть как старый файл iml, так и файл для нового каталога

Я не могу найти способа помешать Android Studio выполнять генерацию этого файла iml, когда проект хранится в другом каталоге. Добавление их в систему управления версиями вызовет проблемы. Поэтому я думаю, что, возможно, мы должны игнорировать файлы * .iml и .idea/modules.xml

17
задан Thomas Levesque 26 June 2009 в 07:50
поделиться

3 ответа

I think you can create your own provider that uses the defaults you want to use. You could create that provider easily by inheriting all the classes from odp.net, just adjust some properties like BindByName.

The DbProviderfactory will create your classes instead of the normal odp.net classes.

7
ответ дан 30 November 2019 в 14:29
поделиться

Что касается прекращение поддержки поставщика Microsoft ADO .NET для Oracle:

  • Я буду продолжать использовать его вместо ODP .NET, ваша проблема - лишь одна из многих проблем с ним. И в дальнейшем он будет по-прежнему доступен в .NET 4.0, хотя и не поддерживается.
  • Если Oracle удастся вывести этот поставщик из строя, я, вероятно, выберу коммерческую альтернативу, такую ​​как DataDirect ADO.NET Data Provider для Oracle или dotConnect для Oracle , которые полностью интегрируются в платформу ADO .NET. И, кстати, они уже поддерживают Entity Framework (я полагаю, Oracle заявила, что ODP .NET не будет).

ODP .NET уже отнял у меня слишком много времени.

1
ответ дан 30 November 2019 в 14:29
поделиться

Используйте косвенное обращение и наследование! Если вы выполняете доступ к данным через абстрактный класс базы данных, потребуйте привязку параметра дескриптора реализации базы данных.

public abstract class Database
{
    private readonly DbProviderFactory factory;

    protected Database(DbProviderFactory factory)
    {
        this.factory = factory;
    }

    public virtual DbCommand CreateCommand(String commandText)
    {
        return CreateCommand(CommandType.Text, commandText);
    }

    public virtual DbCommand CreateCommand(CommandType commandType, String commandText)
    {
        DbCommand command = factory.CreateCommand();
        command.CommandType = commandType;
        command.Text = commandText;
        return command;
    }

    public virtual void BindParametersByName(DbCommand command)
    {

    }
}

И выберите создание конкретной реализации Oracle, которая переопределяет создание команды по умолчанию или предоставляет возможность привязать параметры по имени.

public class OracleDatabase : Database
{
    public OracleDatabase()
        : base(OracleClientFactory.Instance)
    {

    }

    public override DbCommand CreateCommand(CommandType commandType, String commandText)
    {
        DbCommand command = base.CreateCommand(commandType, commandText);
        BindParametersByName(command);
        return command;
    }

    public override void BindParametersByName(DbCommand command)
    {
        ((OracleCommand)command).BindByName = true;
    }
}

Код, основанный на блоке приложения доступа к данным в Enterprise Library .

4
ответ дан 30 November 2019 в 14:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: