Есть вот такая таблица:
SET SQL DIALECT 3;
CREATE GENERATOR GEN_USER_ID;
CREATE TABLE "USER" (
ID INTEGER NOT NULL,
FNAME VARCHAR(32) CHARACTER SET UTF8,
MNAME VARCHAR(32) CHARACTER SET UTF8,
LNAME VARCHAR(32) CHARACTER SET UTF8,
"POSITION" VARCHAR(32) CHARACTER SET UTF8
);
ALTER TABLE "USER" ADD CONSTRAINT PK_USER PRIMARY KEY (ID);
SET TERM ^ ;
CREATE OR ALTER TRIGGER USER_BI0 FOR "USER"
ACTIVE BEFORE INSERT POSITION 0
AS
begin
new.id = gen_id(gen_user_id, 1);
end
^
SET TERM ; ^
И код:
[TableName("USER")]
public class User
{
[MapField("ID"), PrimaryKey, NonUpdatable] public int Id { get; set; }
[MapField("FNAME")] public string FirstName { get; set; }
[MapField("MNAME")] public string MiddleName { get; set; }
[MapField("LNAME")] public string LastName { get; set; }
[MapField("POSITION")] public string Position { get; set; }
public User() { }
public User(string FirstName, string MiddleName, string LastName, string Postition)
{
this.FirstName = FirstName;
this.MiddleName = MiddleName;
this.LastName = LastName;
this.Position = Position;
}
public override string ToString( )
...
}
static void Main(string[] args)
{
BLToolkit.Data.DataProvider.FdpDataProvider.QuoteIdentifiers = true;
DbManager.AddDataProvider(new BLToolkit.Data.DataProvider.FdpDataProvider());
DbManager.AddConnectionString("Fdp", "Default", @"Data Source=localhost;Database=data.fdb;User Id=SYSDBA;Password=masterkey");
var q = new SqlQuery<User>(new DbManager("Fdp", "Default"));
var r = new Random();
q.Insert(new User("F" + r.NextDouble().ToString(), "M" + r.NextDouble().ToString(), "Kagdila?",
"TestP" + r.NextDouble().ToString()));
q.DisposeDbManager = true;
foreach (var x in q.SelectAll())
Console.WriteLine(x);
Console.ReadKey();
}
Проблема в том, что POSITION в базе после вставки записи равен null.
Если вручную написать запрос через DbManager.SetCommand, то все работает.
Куда копать?
P.S.1.: Можно конечно переименовать название таблицы и поля так, чтобы они не совпадали с ключевыми словами...
P.S.2.: Win7, Firebird-2.5.0.26074_1_Win32, VS 2010 Express / Project target .NET 4.0, FirebirdSql.Data.FirebirdClient v 2.5.2.0
Здравствуйте, Terre, Вы писали:
T>T> [TableName("USER")]
T> public class User
T> {
T> [MapField("ID"), PrimaryKey, NonUpdatable] public int Id { get; set; }
T> [MapField("FNAME")] public string FirstName { get; set; }
T> [MapField("MNAME")] public string MiddleName { get; set; }
T> [MapField("LNAME")] public string LastName { get; set; }
T> [MapField("\"POSITION\"")] public string Position { get; set; }
T>
?
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Terre, Вы писали:
T>>T>> [MapField("\"POSITION\"")] public string Position { get; set; }
T>>
IT>?
Вот именно поэтому я сделал так:
BLToolkit.Data.DataProvider.FdpDataProvider.QuoteIdentifiers = true;
(отключать, что по-умолчанию, тоже пробовал)
А если сделать так:
[MapField("\"POSITION\"")] public string Position { get; set; }
то
Dynamic SQL Error
SQL error code = -104
Token unknown — line 11, column 3
"POSITION"
После того, как я посмотрел
Console.WriteLine(q.GetSqlQueryInfo(d, typeof(User), "Insert").QueryText);
И увидел, что там все нормально, то нашел вот что
public User(string FirstName, string MiddleName, string LastName, string Postition)
{
this.FirstName = FirstName;
this.MiddleName = MiddleName;
this.LastName = LastName;
this.Position = Position;
}
Удалите тему, BLT работает нормально...