Всем привет!
Раньше использовал BLToolkit + PostgreSQL. Для создания объектной модели БД был Т4 скрипт.
Есть что-то подобное для Oracle. Если средство есть, подскажите, пожалуйста. И как его юзать?
Спасибо
|
t4, раньше была ссылка но потерял ее
и какой наилучший способ генерирования моделей
|
Posted
over 13 years
ago
Смотрю фреймворк, и пол дня не могу разобраться как просто преобразовать значение при маппинге. т.е. например, часть строковых полей преобразовать к верхнему регистру.
В моём представлении должен быть аттрибут, который бы навешивался на поле и
... [More]
принимал бы тип конвертера, но в упор не нахожу. Есть MemberMapper, но в SetValue почему то не передаётся свойство, которое нужно изменить. [Less]
|
Есть вопрос:
При создании клона объекта EditableObject (класса наследуемого от EditableObject),
можно одновременно получать и клоны объектов EditableList (которые находятся в объекте клонируемого класса)?
|
Posted
over 13 years
ago
Можно ли в при изменении EditableObject организовать что-то вроде транзакций?
т.е. откатывать изменения до какого-то промежуточного зафиксированного состояния
на примере:
public abstract class TestObject :
... [More]
EditableObject<TestObject>
{
public abstract string FirstName { get; set; }
public abstract string LastName { get; set; }
}
[Test]
public void Test()
{
TestObject obj = TestObject.CreateInstance();
obj.FirstName = "Tester";
obj.LastName = "Testerson";
obj.AcceptChanges(); // зафиксировали
obj.FirstName = "Developer";
// ! можно тут как-то зафиксировать промежуточное состояние?
obj.FirstName = "Admin";
// ! а тут откатить до этого состояния, т.е. не до "Tester", а до "Developer"
obj.RejectChanges(); // тут откатываем до "Tester"
Assert.AreEqual("Tester", obj.FirstName);
Assert.IsFalse(obj.IsDirty);
}
} [Less]
|
Как можно задать разные имена таблиц (вернее представлений) для разных типов команд в SqlQuery<T> ?
|
Posted
over 13 years
ago
Господа, скажите, пожалуйста, почему не выводится "Стоп" в следующем коде?
И как это лечить?
Thread thread = new Thread(() =>
{
Trace.WriteLine("Старт.");
using(DbManager db = new DbManager()){}
Trace.WriteLine("Стоп.");
});
thread.Start();
Заранее благодарю.
|
Добрый день!
Имеется такой аксессор:
public abstract class AddressAccessor : DataAccessor<Address>, IObjectAccessor
{
[SprocName("address_dlg.get_address")]
public abstract IDomainObject SelectByKey([ParamName("address_id")]object
... [More]
key);
}
get_address — это оракловая функция, объявленная вот так:
FUNCTION get_address(address_id IN VARCHAR2) RETURN SYS_REFCURSOR
Проблема в том, что в процедуру не передается значение параметра.
Если же параметр в аксессоре сделать типом string — то тогда до функции в оракле долетает переданный в SelectByKey параметр.
Пробовал атрибут ParamDbType — не помогает.
Менять имя и тип параметра нельзя — это от интерфейса досталось.
В качестве датапровайдера используется Devart.
В какую сторону копать?
И второй вопрос: где-то внутри БЛТ есть список сообщений/ошибок, которые не выкидываются исключениями, но сигнализируют, что что-то пошло не так? [Less]
|
При таком запросе
public static void SaveUpdateUserSettings(int userId, string key, string data, byte[] binaryData)
{
using (var ctx = CBloomNewsDataContext.Context)
{
UserSetting us = ctx.UserSettings.FirstOrDefault(_ =>
... [More]
_.UserId == userId && _.Key == key);
if (us == null)
{
ctx.Insert(new UserSetting
{
UserId = userId,
Key = key,
Data = data,
BinaryData = binaryData,
});
}
else
{
us.Data = data;
us.BinaryData = binaryData; // <-- здесь
ctx.Update(us);
}
}
}
...
[TableName(Name="UserSettings")]
public partial class UserSetting
{
[ PrimaryKey(1), Required ] public int UserId { get; set; } // int(10)
[ PrimaryKey(2), MaxLength(50), Required] public string Key { get; set; } // nvarchar(50)
[Nullable, MaxLength(1073741823) ] public string Data { get; set; } // ntext(1073741823)
[Nullable ] public byte[] BinaryData { get; set; } // varbinary(-1)
}
если binaryData = null, то получаем ошибку
Implicit conversion from data type nvarchar to varbinary(max) is not allowed. Use the CONVERT function to run this query.
Callstack
> BLToolkit.4.dll!BLToolkit.Data.DbManager.ExecuteOperation<int>(BLToolkit.Data.OperationType operationType, System.Func<int> operation) Line 4396 + 0xb bytes C#
BLToolkit.4.dll!BLToolkit.Data.DbManager.ExecuteNonQueryInternal() Line 615 + 0x51 bytes C#
BLToolkit.4.dll!BLToolkit.Data.DbManager.ExecuteNonQuery() Line 2793 + 0x8 bytes C#
BLToolkit.4.dll!BLToolkit.Data.DbManager.BLToolkit.Data.Linq.IDataContext.ExecuteNonQuery(object query) Line 184 + 0x8 bytes C#
BLToolkit.4.dll!BLToolkit.Data.Linq.Query<int>.NonQueryQuery(BLToolkit.Data.Linq.IDataContextInfo dataContextInfo, System.Linq.Expressions.Expression expr, object[] parameters) Line 213 + 0xc bytes C#
BLToolkit.4.dll!BLToolkit.Data.Linq.Query<int>.SetNonQueryQuery.AnonymousMethod__e(BLToolkit.Data.Linq.QueryContext ctx, BLToolkit.Data.Linq.IDataContextInfo db, System.Linq.Expressions.Expression expr, object[] ps) Line 201 + 0x12 bytes C#
BLToolkit.4.dll!BLToolkit.Data.Linq.Query<CBloomNewsDataModel.UserSetting>.Update(BLToolkit.Data.Linq.IDataContextInfo dataContextInfo, CBloomNewsDataModel.UserSetting obj) Line 820 + 0x53 bytes C#
BLToolkit.4.dll!BLToolkit.Data.Linq.Extensions.Update<CBloomNewsDataModel.UserSetting>(BLToolkit.Data.Linq.IDataContext dataContext, CBloomNewsDataModel.UserSetting obj) Line 288 + 0x3c bytes C#
CBloomNews.Database.dll!CBloomNews.Database.BussinesLogic.BL.Users.SaveUpdateUserSettings(int userId, string key, string data, byte[] binaryData) Line 440 + 0x11 bytes C#
BLToolkit — последнея из GIT... << RSDN@Home 1.2.0 alpha 5 (M4) rev. 1510>> [Less]
|
Posted
over 13 years
ago
Добрый день!
Есть вопрос по поводу свойства IsDirty
Вот пример сущности:
[TableName("SomeTable")]
public abstract class SomeEntity : EditableObject
{
[MapField("somekey")]
public abstract string somekey {
... [More]
get; set; }
[MapField("SomeField")]
public abstract string SomeField{ get; set; }
[Relation(typeof(SubEntity))]
[Association(ThisKey = "somekey", OtherKey = "someotherkey", CanBeNull = true)]
public EditableList<SubEntity> SomeList = new EditableList<SubEntity>(true);
}
Если изменится какое-нибудь свойство SomeEntity (кроме SomeList), тогда SomeEntity.IsDirty == true
Если изменится какой-нибудь элемент в SomeList, но при этом остальные свойства SomeEntity не меняются,
тогда SomeList.IsDirty == true, но SomeEntity.IsDirty == false.
Кто может прокомментировать такое поведение?
Почему признак изменения списков не отражается на основном объекте? [Less]
|