Есть класс:
public abstract class MyAccessor: DataAccessor
{
[SprocName("GetMyStuff")]
public abstract List<MyRow> GetMyStuff(int tmp);
}
Его использование:
using (DbManager db = new DbManager(new
... [More]
BLToolkit.Data.DataProvider.OdbcDataProvider(), myConnectionString))
{
MyAccessor accessor = DataAccessor.CreateInstance<MyAccessor>(db);
List<MyRow> details = accessor.GetMyStuff(1);
}
Ошибка:
[NotSupportedException] Specified method is not supported.
Возникает здесь:
OdbcDataProvider.cs
public override ISqlProvider CreateSqlProvider()
{
throw new NotSupportedException();
}
Этот метод вызывается отсюда:
DataProviderBase.cs
public virtual object Convert(object value, ConvertType convertType)
{
return SqlProvider.Convert(value, convertType);
}
Где value = "tmp", convertType = NameToCommandParameter
Как я понимаю, это не должно работать никаким образом. У кого-нибудь получалось вызвать хранимку MS SQL через ODBC-подключение? [Less]
|
Описание среды:
В своем проекте мы используем BLToolkit в качестве ORM для локальной БД Silverlight клиента (DB: SQLite, DataProvider: CSharp-Sqlite).
Описание ситуации:
При построении некоторых linq запросов (например, включающих в себя
... [More]
StringField.ToLower() == "abc"), на вход DbManager.ExecuteReader приходит QueryContext с дублирующимися параметрами.
var parameters = sqlQuery.IsParameterDependent
? sqlQuery.Parameters.ToArray()
: query.GetParameters();
foreach (var parameter in parameters)
{
var cmdParam = DataProvider.CreateParameterObject(cmd);
cmdParam.ParameterName = parameter.Key;
cmdParam.Value = parameter.Value;
DataProvider.AttachParameter(cmd, cmdParam);
}
Соответственно, при попытке добавить эти параметры к SqlCommand вылетает эксепшн дублирующихся параметров. [Less]
|
Posted
about 13 years
ago
Добрый день всем , проясните пожалйста ситуацию ,
здесь в 87 строке сказано что наследование TPT есть,
ЗдесьАвтор: SkySandyДата: 12.11.10 судя по по описанию классов тоже упоминается (и возможно у кого-то даже работает ).
Подсажите пжлста можно
... [More]
ли все таки с помощью BLT сделать следующий маппинг:
Структура классов и таблиц упрощенно:
Иерархия классов
public class BaseObject{
public Guid ID{get;set;}
public string Name {get;set;}
}
public class User:BaseObject{
public string UserData {get;set;}
}
public class MegaUser:User{
public string MegaData {get;set;}
}
База:
CREATE TABLE [dbo].[BaseObjectTable](
[bo_ID] [uniqueidentifier] NOT NULL,
[bo_Name] [nvarchar](50) NULL,
[bo_Type] [int] NULL, -- для дискриминатора если он нужен при таком маппинге
Primary Key (bo_ID)
)
CREATE TABLE [dbo].[User](
usr_ID [uniqueidentifier] NOT NULL, -- usr_ID = bo_ID - для юзера тоже значение ключа что и и таблице BaseObjectTable
usr_Data [nvarchar](50) NULL,
Primary Key (usr_ID)
)
CREATE TABLE [dbo].[MegaUser](
musr_ID [uniqueidentifier] NOT NULL, -- musr_ID = usr_ID = bo_ID - аналогично для мега юзера значение ключей во всех табличках совпадают
musr_MegaData [nvarchar](50) NULL,
Primary Key (car_ID)
)
Соответственно ожидаемый результат для запроса на LINQ var res=dbmanager.MegaUsers.ToList() ;
:
Select bo_ID, bo_Name,usr_Data,musr_MegaData
from BaseObjectTable
join User on usr_ID = bo_ID
join MegaUser on musr_ID = usr_ID
Пробовал описывать маппинг вот так
[TableName("BaseObjectTable")]
[InheritanceMapping(Code = 1, Type = typeof(User))]
[InheritanceMapping(Code = 2, Type = typeof(MegaUser))]
public class BaseObject{
[PrimaryKey] [MapField("bo_ID")] public Guid ID{get;set;}
[MapField("bo_Name")] public string Name { get; set; }
[MapField(IsInheritanceDiscriminator = true,MapName ="bo_Type")] public int Type { get; set; }
}
[TableName("User")]
public partial class User : BaseObject {
[MapField("usr_Data")] public string UserData { get; set; }
}
[TableName("MegaUser")]
public partial class MegaUser: User {
[MapField("musr_MegaData")] public string MegaData{ get; set; }
}
и вот так (для переопредения поля ID на usr_ID вместо bo_ID
[TableName("User")]
public partial class User : BaseObject {
[PrimaryKey] [MapField("usr_ID")] public override Guid ID{get;set;}
....
}
как ни кручу получается все время примерно одно и тоже :
SELECT
[t1].[musr_MegaData] as [MegaData],
[t1].[usr_Data] as [UserData],
[t1].[bo_ID] as [ID],
[t1].[bo_Name] as [Name],
[t1].[bo_Type] as [Type1]
FROM
[User] [t1]
WHERE
[t1].[bo_Type] = 2
Заранее спасибо.
PS: если что не так сильно не пинайте — гугл помочь не смог , а документации откровенно говоря не хватает [Less]
|
Необходимо перед каждым запросом к БД устанавливать CONTEXT_INFO
В NHibernate, например, можно определить ConnectionProvider и внутри него реализоавать эту функциональность.
Какой подход избрать для BLT в случае если требуется выполнить SET CONTEXT_INFO после открытия соединения и перед каждым запросом к БД MSSQL?
|
Я правильно понимаю что в последних версиях BLT Xml-маппинг не поддерживается, остался только маппинг на атрибутах?
|
Posted
about 13 years
ago
1) Будет ли поддержка новых команд MSSQL 2012?
2) Будет ли поддержка асинхронного выполнения запросов?
Если да, то когда ждать?
|
как я понял миграция BLT -> linq2db происходит весьма активно, но часть функционала BLT в linq2db просто не попадет (дата аксессоры, эмит, обджект биндер, едитабл обджект и т.п.)
в связи с чем встает вопрос, как будут сосуществовать и развиваться
... [More]
эти 2 проекта?
пока коммиты идут в оба репозитария, но этож будет закат солнца вручную, в особенноети если считать что один проект это си-диез, а другой немераль. [Less]
|
такой код:
[Test]
public void ParallelSelectAndUpdate()
{
ForEachProvider(Providers.Select(p => p.Name).Except(new[] {ProviderName.Firebird}).ToArray(), context =>
{
... [More]
var db = context as TestDbManager;
if (db == null) return;
db.BeginTransaction();
try
{
Assert.That(db.Person.Count(), Is.GreaterThan(0));
foreach (var parent in db.Person) // читаем
{
new SqlQuery(db).Update(parent); // и обновляем
}
}
finally
{
db.RollbackTransaction();
}
});
}
выдает ошибку:
System.InvalidOperationException : Invalid attempt of read when the reader is closed.
at FirebirdSql.Data.FirebirdClient.FbDataReader.CheckState()
at FirebirdSql.Data.FirebirdClient.FbDataReader.Read()
at BLToolkit.Data.DataProvider.DataProviderBase.DataReaderBase`1.Read() in DataProviderBase.cs: line 341
at BLToolkit.Data.Linq.Query`1.<RunQuery>d__11.MoveNext() in Query.cs: line 330
at BLToolkit.Data.Linq.Query`1.<Map>d__60.MoveNext() in Query.cs: line 988
at Data.Linq.SelectTest.<ParallelSelectAndUpdate>b__86(ITestDataContext context) in SelectTest.cs: line 535
at Data.Linq.TestBase.ForEachProvider(Type expectedException, String[] exceptList, Action`1 func) in TestBase.cs: line 238
at Data.Linq.SelectTest.ParallelSelectAndUpdate() in SelectTest.cs: line 525
Это by design или косяк? [Less]
|
Привет.
Есть приложение, критичное по времени выполнения.
Допустим также, есть какая-то сложная бизнес процедура, выполняющая многочисленные инсерты.
Есть идея — вместо вызова единичных инсертов 30-40 раз, сделать по примеру UoF паттерна
... [More]
какой-то интерфейс, который бы складывал все инсерт вызовы в один батч, а потом посылал все на SQL Server одной командой.
Вопросы:
— имеет ли это смысл вообще?
— возможно ли такое реализовать средствами BL и как (все инсерты параметризованные, конечно)
— ну и может какой пример есть или готовое решение? все таки задача не тривиальная если глубже копнуть
спасибо [Less]
|
Всем привет!
Есть такая задача:
есть некая таблица v.GetTable<T>() так вот для нее надо построить where условие со значениями в upper case
типа того:
v.GetTable<T>().Where(string.Format(" upper({0}) like upper('%{1}%') ",column
... [More]
, value);
тк нужно применительно к Postgresql, то можно использовать ILIKE или ~~*, соответственно без upper()
подскажите, люди добрые [Less]
|