NuGet 패키지 AsyncPoco v1.2를 사용하고 있습니다. 공식 PetaPoco의 비동기 포크 - "POCO의 작은 ORM-ish 것"입니다. 선택한 DBRM은 오라클이지만 그다지 관련성이 없습니다.Column 속성을 사용하여 AsyncPoco를 사용하여 열 이름에 속성을 연결할 수 없습니다.
지금까지 고전적인 PetaPoco 패키지는 매력처럼 작동했지만 내 문제는 AsyncPoco 패키지가 Column 속성의 값을 사용하지 않고 전체 속성을 무시하고 속성 이름을 직접 열로 사용한다는 것입니다. 식별자.
예 :
나는 마시고는
[PrimaryKey("ID_COL", SequenceName = "SCHEMA.SCHEMA_TABLE_SEQ")]
[TableName("SCHEMA.SCHEMA_TABLE")]
public class PocoModel
{
[Column("ID_COL")]
public long Id { get; set; }
[Column("NAME_COL")]
public string Name { get; set; }
}
내가 필요한 속성에 값을 할당 만든 다음 나는
이public async Task InsertPoco(PocoModel model, DbConnection conn)
{
var taskCompletionSource = new TaskCompletionSource<bool>();
using (var database = new AsyncPoco.Database(conn))
{
await database.InsertAsync(model);
taskCompletionSource.TrySetResult(true);
}
await taskCompletionSource.Task;
}
그러나 나는 다음과 같은 오류 때를받는 InsertAsync을 수행 할 InsertAsync 시도 중 : "Oracle.ManagedDataAccess.Client.OracleException : ORA-00904 :"NAME ": 유효하지 않은 식별자"
식별자가 Column 속성 값에 명시된 바와 같이 실제로 "name_col"이므로 분명히 정확합니다.
그것의 속성 이름으로 실제 데이터베이스 열 이름을 포함하도록 내가 마시고 개체를 변경하면 다음 삽입 등, 잘 작동 :
public class PocoModel
{
public long ID_COL { get; set; }
public long NAME_COL { get; set; }
}
이 가능 열이를 식별하는 속성을 사용할 수 있나요 테이블 열 또는 문제의 주위에 다른 방법이 있습니까? 내가 뭔가를 놓치기를 바란다면, 우리는 비즈니스 코드에서 그러한 비 전통적인 속성 이름으로 작업 할 수 없으므로 패키지를 버려야 할 것입니다. 테이블 열 이름을 파스칼/카멜 - 케이스로 변경하는 것은 내가 작업하는 표준에 대한 옵션이 아닙니다.
편집 : 내가 이름 변환 (/AsyncPoco/Core/ColumnInfo.cs)을 발생 할 가능성이 생각 패키지의 소스 코드를 들여다 그리고는 ColumnAttribute을 복용 아니라고 실제로 아주 이상한 보인다 그것이 있어야에도 불구하고, 여기에 코드입니다 : (
// Read attribute
if (ColAttrs.Length > 0)
{
var colattr = (ColumnAttribute)ColAttrs[0];
ci.ColumnName = colattr.Name==null ? pi.Name : colattr.Name;
ci.ForceToUtc = colattr.ForceToUtc;
if ((colattr as ResultColumnAttribute) != null)
ci.ResultColumn = true;
if ((colattr as ComputedColumnAttribute) != null)
ci.ComputedColumn = true;
}
내가 특별히 ColumnAttribute의 이름 속성을 사용하여 열의 이름을 명시하려고 노력하지만, 아무것도 변경하지 않은 것처럼은 안 인수가 ColumnAttribute의 Name 속성에 할당 되었기 때문에 (다른 곳에서는 확인해 보았으나 다음과 같이 확인하고 싶었습니다) :
[Column(Name = "NAME_COL")]
모든 입력이 좋습니다.
답장을 보내 주셔서 감사합니다. Column은 ColumnAttribute에 대한 속기 표기법입니다. 그렇습니다.이 클래스가 실제로 사용해야하는 클래스이고 내가 사용하고있는 클래스라는 것이 맞습니다. 파고 주셔서 감사합니다 :) – Jonast92
기다려, 당신은 뭔가있어! AsyncPoco를 시험해 보는 중에도 Poco 패키지에 대한 참조가 있고 PetaPoco 네임 스페이스의 Column 속성을 참조하고 있습니다. 이전 PetaPoco 참조를 제거하거나 특별히 AsyncPoco.Column을 사용하면 올바른 열 속성을 사용할 수 있으며 제대로 작동하는 것 같습니다. – Jonast92
멋진 힌트 주셔서 감사합니다! – Jonast92