2017-11-27 17 views
0

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")] 

모든 입력이 좋습니다.

답변

3

이전에이 특정 라이브러리를 사용하지는 않았지만 github에서 소스를 신속하게 살펴본 결과 this ColumnAttribute이 발견되었습니다. .NET 대신 .NET을 사용하려고 했습니까?

+0

답장을 보내 주셔서 감사합니다. Column은 ColumnAttribute에 대한 속기 표기법입니다. 그렇습니다.이 클래스가 실제로 사용해야하는 클래스이고 내가 사용하고있는 클래스라는 것이 맞습니다. 파고 주셔서 감사합니다 :) – Jonast92

+0

기다려, 당신은 뭔가있어! AsyncPoco를 시험해 보는 중에도 Poco 패키지에 대한 참조가 있고 PetaPoco 네임 스페이스의 Column 속성을 참조하고 있습니다. 이전 PetaPoco 참조를 제거하거나 특별히 AsyncPoco.Column을 사용하면 올바른 열 속성을 사용할 수 있으며 제대로 작동하는 것 같습니다. – Jonast92

+0

멋진 힌트 주셔서 감사합니다! – Jonast92

1

@ David의 힌트 덕분에 문제를 해결할 수있었습니다. 그럼에도 .NET ColumnAttribute 속성을 사용하지는 않았지만 (틀림없이) 틀린 것을 사용하고있었습니다.

문제는 여전히 PetaPoco 네임 스페이스에 대한 참조가 있었고 AsyncPoco ColumnAttribute를 사용하는 대신 PetaPoco ColumnAttribute를 참조했기 때문에 발생했습니다. 그것은 분명히 작동하지 않습니다.

PetaPoco 네임 스페이스에 대한 참조를 제거하면 올바른 ColumnAttribute를 사용할 수있게됩니다.