Visual Studio топает хранимыми процедурами Linq - PullRequest
1 голос
/ 19 июля 2009

У меня есть несколько хранимых процедур, которые возвращают строго типизированный набор результатов. Я узнал, что у Linq есть собственный метод для обработки этого, который должен быть перезаписан (или, по крайней мере, так кажется).

Моя проблема в том, что Visual Studio иногда требует принудительного воссоздания хранимых процедур. Я хочу отключить это.

Вот мой вручную измененный файл:

    [Function(Name="dbo.spGetNote")]
    public ISingleResult<Note> spGetNote([Parameter(DbType="Int")] System.Nullable<int> noteId, [Parameter(DbType="Int")] System.Nullable<int> securityUserId)
    {
        IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), noteId, securityUserId);
        return ((ISingleResult<Note>)(result.ReturnValue));
    }

Вот то, что это по умолчанию:

    [Function(Name="dbo.spGetNote")]
    public ISingleResult<spGetNoteResult> spGetNote([Parameter(DbType="Int")] System.Nullable<int> noteId, [Parameter(DbType="Int")] System.Nullable<int> securityUserId)
    {
        IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), noteId, securityUserId);
        return ((ISingleResult<spGetNoteResult>)(result.ReturnValue));
    }

Это один из самых маленьких.

Есть некоторые другие области, с которыми он сталкивается, но это поправимо. Он реальный старый, возвращающийся и корректирующий это.

В конечном итоге все хранимые процедуры, которые возвращают свой собственный строго типизированный элемент, получают свой собственный контекст / класс данных, чтобы при каждом обновлении нашего DAL он (Visual Studio) не давил на наши собственные меняется.

Что я могу сделать, чтобы облегчить эту головную боль?

Что привело к тому, что я прошёл очистку пространств имен и обнаружил, что не могу изменить пространство имен без разрыва каждой Visual Studio каждой хранимой процедуры в проекте, и я не хочу тратить часы на очистку до этого беспорядка. По-видимому, глобальной замены недостаточно, поскольку Visual Studio обнаруживает это и затем говорит, что не может найти строку подключения, и должен перестроить каждый задействованный файл.

Ответы [ 2 ]

2 голосов
/ 19 июля 2009

Поскольку автоматически сгенерированный DataContext является частичным, вы можете создать свой собственный частичный класс и переместить свои настраиваемые методы / типы в частичный. т.е.

MyDataContext.cs

public partial MyDataContext
{
        [Function(Name="dbo.spGetNote")]        
        public ISingleResult<Note> spGetNote([Parameter(DbType="Int")]...
}

public class Note...

Джо

1 голос
/ 19 июля 2009

Не изменяйте сгенерированный код. Если вы это сделаете, то каждый раз, когда вы смотрите на файл dbml, ваши изменения могут быть потеряны. Вы могли бы (я не пробовал) исправить это, отредактировав dbml вручную (это просто xml); но IMO, самый простой способ справиться с этим внутри вашего репозитория, чтобы сделать проекцию из сгенерированного dbml типа на ваш тип:

Note[] SomeFunc(...) {
    using(var ctx = ...) {
        return (from row in ctx.SomeSP(...) // row is the dbml type
             select new Note { // Note is our custom type
                 Id = row.Id,
                 Name = row.Name,
                 // etc
              }).ToArray(); // or whatever
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...