2012-10-06 31 views
9

ServiceStack OrmLite'ın varsayılan ve hesaplanan sütunları nasıl ele aldığı tam olarak nedir? ServiceStack OrmLite - Varsayılan ve Hesaplanan sütunların işlenmesi

Özellikle hatası

The column "PointsAvailable" cannot be modified because it is either a computed column or is the result of a UNION operator. 

Bu sütun, bir SQL Server 2008 veritabanında bir bilgisayarlı sütun olarak yapılandırılır alıyorum.

OrmLite, modeldeki bir özelliğe '[ServiceStack.DataAnnotations.Compute]' özniteliğini ekleyebileceğiniz şekilde, hesaplanmış sütunlarla bir şeyler yapmak gibi görünüyor.

Kodun içine girdiğinizde, 'OrmLiteDialetBase.cs' içindeki 'ToInsertRowStatement' işlevi çağrılır. Bu işlev AutoIncrement özelliğinin ayarlandığını kontrol ederken, IsComputed özelliğinin ayarlanıp ayarlanmadığını kontrol etmez.

Bunun bir hata mı yoksa yanlış mı kullanıyorsam bilmiyorum.

+0

IsComputed için bir kontrol eklemeye çalışıyorum. Bu sorunu giderirse, bugfix ile github'da bir çekme isteği oluşturun. ServiceStack iyi yapılandırılmış bir programdır, bu nedenle bu kontrolün gerçekleşebileceği birden fazla yer olması muhtemel değildir. – theMayer

+0

Önceki yorumumu açıklığa kavuşturmak için, bunu kaynak kodunda yaparsınız, sonra ikiliyi yeniden derleyin. Yaklaşık 5 dakikadan fazla sürmemelidir. – theMayer

cevap

0

Tablodan ilgili sütunlarla (hesaplanan sütunlar hariç) bir görünüm oluşturup bunun yerine görünümden çalışacağım. Bu şekilde istenmeyen hesaplanmış sütunlara başvurulardan kaçınılırsınız. Basit görünümler, ekleme, silme, güncelleme ve diğer pek çok açıdan normal tablolarla aynı şekilde ele alınabilir. Sadece servis katmanında hesaplanır benim hesaplanan sütunlar için

+0

Bu çok ... hacky. Bunu yapmak için ServiceStack'te dahili bir yol olduğunu umuyordum. – John

+0

@john Şu anda ServiceStack OrmLite bir tür hata yaşıyorsanız görünüyor. Aracınızı tamir edemediğimden, en iyi ikinci şey bir geçici çözüm olmalı, bu bir çözüm için benim ameliyatım. Aksi takdirde OrmLite'ı yapan ve düzeltme talebinde bulunanlarla iletişime geçebilirsiniz. –

6

SQL onlar hakkında hiçbir şey bilmeyen, bu yüzden servicestack modeline şu özelliklerden bir arada kullandı:

[Compute, ServiceStack.DataAnnotations.Ignore] 
public List<MyModel> MyList {get;set;} 

fark gibi görünüyor Ad alanı eklendiğinde ısrar eden "Yoksay" özelliği nedir? Bunlarla birlikte, temel sorgularım çalışıyor, aksi halde SQL sütunların mevcut olmadığından şikayet ediyor - haklı!

t-clausen.dk tarafından önerilen şekilde, istediğiniz bir SQL CommandText dizesini istediğiniz tüm sütun adlarıyla geçirerek bir SQL Filtresi kullanabilirsiniz, ancak bunun bir bakım sorunu olduğunu düşünüyorum.

Veritabanına bakan bir hata düzeltmesiyle ilgili olarak, SQL'in bir "toSqlString()" veya benzeri bir yöntemle sağlayıcı başına temelinde oluşturulduğu anlaşılıyor. Bu nedenle, dikkat edilmesi gereken birkaç nokta vardır.

DÜZENLEME: Bu, işi yapan Yoksayma niteliğidir. Kaynak:

/// IgnoreAttribute 
/// Use to indicate that a property is not a field in the table 
/// properties with this attribute are ignored when building sql sentences 

Ayrıca, keşfetmediğim bir ALIAS kullanma seçeneği de vardır.