6
I Use This!
Inactive

News

Analyzed about 15 hours ago. based on code collected about 15 hours ago.
Posted over 12 years ago by AK107 <[email protected]>
Подскажите, исходя из чего (и для чего) принимается решение встраивать параметры linq запросов в sql-код в виде констант? Можно ли как-то на это повлиять? Обратил внимание, что это происходит со многими запросами, но не со всеми, зависимость не догоняю.
Posted over 12 years ago by Jack128 <[email protected]>
есть простой left join var permissions = ( from parentSmetaItem in SmetaItems join permission in Permissions on new {SmetaItemID = parentSmetaItem.ID, UserID = userID} equals ... [More] new {permission.SmetaItemID, permission.UserID} into g from permission in g.DefaultIfEmpty() select new {parentSmetaItem.OwnerID, permission.CanRead} ).ToList(); проблема в том, что permission.CanRead имеет тип bool, а мне на выходе хотелось бы получить null, если в правой таблице нет записи. пробывал и обычным кастом (bool?)permission.CanRead и Sql.ConvertTo<bool?>.From(permission.CanRead) все равно вместо null'я false возвращается. работает такой вариант: var permissions = ( from parentSmetaItem in SmetaItems join permission in Permissions on new {SmetaItemID = parentSmetaItem.ID, UserID = userID} equals new {permission.SmetaItemID, permission.UserID} into g from permission in g.DefaultIfEmpty() select new {parentSmetaItem.OwnerID, CanRead = permission != null ? (bool?)permission.CanRead : null} ).ToList(); но в этом случае — на клиента зачем то тащатся все поля таблицы Permissions. Как быть ?? BLToolkit последний из NuGet'а [Less]
Posted over 12 years ago
Не совсем понятно зачем в BLToolkit для меппинга полей через аттрибуты такие "навороты", просто ради интерфейсов и демонстрации возможностей ооп и паттернов ? Вообще зачем нужен BLToolkit для работы с БД, абстракция от БД поддерживается на уровне ... [More] стандартных IDbxxxxxx Единственное удобство это меппинг, но и там оверхед из-за кучи посредников, получается не эффективно в проектах где требуется хорошая производительность, проще написать свой инициализатор достаточно универсальный для всех проектов без оверхеда. Еще несколько вопросов: почему BusinessLogic называется, а реализовано взаимодействие с БД ? в чем заключается какая-то поддержка Linq ( в анонсах видел что якобы реализована поддержка ) ? из ExecuteReader() возвращается коллекция IList<> а Linq с ней и сам может работать. [Less]
Posted over 12 years ago by AK107 &lt;[email protected]&gt;
Почему для реализации batch insert был выбран именно insert all с простыней инсертов? Есть же куда более подходящий инструмент — Bulk Inserts Using Array Binding. Он не генерит простыню инсертов со значениями параметров в виде строк который еще ... [More] нужно отпарсить серверу. Он безопаснее и, самое главное, гораздо быстрее и менее глючнее (не нужно ограничивать maxBatchSize — привет ошибка оракла на ограниченное количество "столбцов" в одном запросе). При использовании хранимых процедур этот механизм задействуется. Вот пример: string sql = "insert into bulk_test (employee_id, first_name, last_name, dob) values (:employee_id, :first_name, :last_name, :dob)"; var employeeIds = new int[1000]; var firstNames = new string[1000]; var lastNames = new string[1000]; var dobs = new DateTime[1000]; // тут инициализируем массивы var cmd = connection.CreateCommand(); cmd.CommandText = sql; cmd.CommandType = CommandType.Text; // To use ArrayBinding, we need to set ArrayBindCount cmd.ArrayBindCount = employeeIds.Length; // Instead of single values, we pass arrays of values as parameters cmd.Parameters.Add(":employee_id", OracleDbType.Int32, employeeIds, ParameterDirection.Input); cmd.Parameters.Add(":first_name", OracleDbType.Varchar2, firstNames, ParameterDirection.Input); cmd.Parameters.Add(":last_name", OracleDbType.Varchar2, lastNames, ParameterDirection.Input); cmd.Parameters.Add(":dob", OracleDbType.Date, dobs, ParameterDirection.Input); cmd.ExecuteNonQuery(); собственно единственное изменение в выделенном месте. [Less]
Posted over 12 years ago by matumba &lt;[email protected]&gt;
Ребят, просто вопрос по ускорению разработки: тута предлагают аж три утилиты, генерящие классы по схеме в БД. Какая из них наиболее актуальная/развивается? (сам юзал самописный Perl конвертер) Ну и чтоб 2 раза не вставать: четвёртым предлагается ... [More] "Using Linq to SQL data model designer". Догадываюсь, это какой-то встроенный в VS инструмент, но разве он выдаст именно те атрибуты, что требует BLT?? Или нужно будет допиливать исходники? И совсем чтоб не садиться Хочу заюзать LINQ практически для единственной вещи — динамическое построение запроса (где добавляются фильтры по колонкам). Это стандартная для LINQ вещь? BLT её поддерживает? До этого строил запросы просто построением SQL-строки. Тупо, зато понятно и работает на любом фрэймворке. Да, и ещё: вот эти все три конвертера — они построят не только классы-таблицы, но и главный класс Database? (ну для которого пишут db.Employee.Insert(blah....) ) Спасибо! [Less]
Posted over 12 years ago by Ummon &lt;[email protected]&gt;
Привет! При повторном клонировании EditableObject теряется IsDirty у вложенной сущности. [TestFixture] public class CloneObjectTest { [Test] public void PreserveIsDirtyPerCloneObjectTest() { // Arrange var ... [More] entity = TestEntity.CreateInstance(); entity.TestChildEntity = TestChildEntity.CreateInstance(); entity.IntProp = 1; entity.TestChildEntity.IntProp = 1; entity.AcceptChanges(); // Act var firstClone = entity.Clone(); firstClone.IntProp = 0; firstClone.TestChildEntity.IntProp = 0; var secondClone = firstClone.Clone(); // Assert Assert.False(entity.IsDirty); Assert.False(entity.TestChildEntity.IsDirty); Assert.True(firstClone.IsDirty); Assert.True(firstClone.TestChildEntity.IsDirty); Assert.True(secondClone.IsDirty); Assert.True(secondClone.TestChildEntity.IsDirty); // fail } public abstract class TestEntity : EditableObject<TestEntity> { public abstract int IntProp { get; set; } public abstract TestChildEntity TestChildEntity { get; set; } } public abstract class TestChildEntity : EditableObject<TestChildEntity> { public abstract int IntProp { get; set; } } } [Less]
Posted over 12 years ago by Genius_P &lt;[email protected]&gt;
Если два объекта ссылаются друг на друга получаем StackOverflowException. Пример для воспроизведения: public class Program { public abstract class Departament { public abstract int Id { get; } ... [More] public abstract int Chief_Id { get; set; } [Association(ThisKey="Chief_Id", OtherKey="Id")] public abstract Employee Chief { get; set; } } public abstract class Employee { public abstract int Id { get; } public abstract int Departament_Id { get; set; } [Association(ThisKey = "Departament_Id", OtherKey = "Id")] public abstract Departament Departament { get; set; } } static void Main(string[] args) { DbManager.AddConnectionString("Server=(localdb)\\Projects; Database=Database; Integrated Security=true"); using (var db = new DbManager()) { foreach (var item in db.GetTable<Departament>()) { Console.WriteLine(item.Id); } } } } [Less]
Posted over 12 years ago
Что-то давненько не было новых релизов. lin2db вообще появился ли на свет (с nemerle или без) или так и был заброшен? IT, поделись новостями и состоянием дел, если не трудно!
Posted over 12 years ago by Holms &lt;[email protected]&gt;
Привет В нашей базе есть таблицы с одинаковым именем, но в разных схемах. Schema1.MyTable Schema2.MyTable При генерации модели через .tt файлы получаем 2 класа MyTable что конечно не правильно. Как проще и правильнее решить эту ... [More] проблему? Никаких изменений в БД быть не может. Спасибо... << RSDN@Home 1.2.0 alpha 5 (M4) rev. 1510>> [Less]
Posted over 12 years ago by Wight &lt;[email protected]&gt;
После недавних изменений в BLToolkit появился баг в генераторе SQL. Заметил на последней версии, собранной из git-репозитория, ветка master. Вот есть простая модель, классы размечены атрибутами Linq2sql: using System.Data.Linq.Mapping; ... [More] [Table] class Sample { [Column(Name="ID")] public long ID { get; set; } [Column(Name="NAME")] public string Name { get; set; } } [Table] class BrokenSample { // column names != property names [Column(Name="ID_")] public long ID { get; set; } [Column(Name="NAME_")] public string Name { get; set; } } Запрос к первому классу генерируется нормально. В запросе ко второму классу делается SELECT всех колонок из таблицы. Единственное отличие между классами — во втором имена колонок не совпадают с именами свойств. using (var db = new DbManager()) { var query = from s in db.GetTable<Sample>() select s.Name; // everything is fine Console.WriteLine(query.ToString()); var query2 = from s in db.GetTable<BrokenSample>() select s.Name; // all columns from BrokenSample are selected Console.WriteLine(query2.ToString()); } Вот такие SQL-запросы генерируются: -- . Sql MsSql2005 SELECT [s].[NAME] as [Name] FROM [s] -- . Sql MsSql2005 SELECT [s].[ID_] as [ID], [s].[NAME_] as [Name] FROM [s] [Less]