Soci (Soczó Zsolt) szakmai blogja

2010.02.01.

EF SSDL alapú felhasználói bemenet ellenőrzés

Filed under: .NET,Adatbázisok,ADO.NET,Entity Framework,Szakmai élet — Soczó Zsolt @ 16:23

A következőn töröm a fejem. Az Entity Framework SSDL-jében definiálva vannak az entitás property-k alapvető jellemzői: nullázhatóság, max hossz. Ezeket a GUI-n ki kell kényszeríteni. Nyilván vannak összetettebb validálási szabályok, de most koncentráljunk ezekre az elemiekre.
Utálok minden redundanciát egy rendszerben, ezért azt gondoltam, a szabályokat kiolvasom az EF sémájából, és ebből táplálom meg a validáló részeket, így nem kell törődni az egyszerű validálásokkal, automatikusan működni fognak.

A következő kis kódocska mutatja meg a metaadatok használatát:

o.ForceLoadingSchemas();

var sspaceEntitySets = o.MetadataWorkspace
.GetItems(DataSpace.SSpace)
.First().BaseEntitySets.OfType();

foreach (EntitySet es in sspaceEntitySets)
{
foreach (EdmProperty p in es.ElementType.Properties)
{
ReadOnlyMetadataCollection facets = p.TypeUsage.Facets;
Debug.WriteLine(“{0} is {1} nullable”, p.Name, (bool)facets[“Nullable”].Value ? “” : “not”);
if (facets.Contains(“MaxLength”))
{
Debug.WriteLine(“{0} MaxLenght is {1}”, p.Name, (int)facets[“MaxLength”].Value);
}
Debug.WriteLine(“{0} is {1} nullable”, p.Name, (bool)facets[“Nullable”].Value ? “” : “not”);
}
}

A ForceLoadingSchemas az ObjectContext partial classában van:

public void ForceLoadingSchemas()
{
CreateQuery(“AdventureWorks2008Entities3.BusinessEntities”).ToTraceString();
}

Csinált már valaki ilyet? Van benne valami csapda, amit most nem látok?

4 Comments

  1. csináltam ilyent, hasonlót.
    Nem az object modellen keresztül, hanem powershell-ből az edmx-et értelmezve.
    Nem az SSDL alapján készült a dolog, hanem a CSDL alapján, mert ebből generáltam BO-kat (amit az ember kienged a fakádon, mert EF SOA), a validáció csak hab a tortán.
    Csapda annyi volt, hogy néha elfelejtette a CSDL-be átvinni a validációhoz köthető tulajdonságokat, azokat kézzel kellett pótolni. De ha SSDL alapján dolgozol, akkor az más, csak akkor van egy trafód a mapping-en keresztül a CSDL-be.
    Validációt érdemes általános módon úgy megoldani, hogy a BLL-ben és a UI-on is tudd használni…
    (Ha nem voltam világos, sorry, pár bor lecsúszott…)

    Comment by kpocza — 2010.02.01. @ 20:39

  2. 1ik sor 2x van. 5letnek jó.

    Comment by Hamurabi — 2010.02.02. @ 20:36

  3. Az ef-nek van template generatora is, azzal simán belegenerálod a validálást. Ha jól emlékszem attributumként belerakja, erre simán lehet építeni…
    Ha nem, akkor meg oda lehetne csapni elé egy attributumot, ami megmondaná a hosszát

    Comment by safi — 2010.02.13. @ 10:03

  4. […] point it out, and in that spirit here is the post that finally sent me in the right direction: http://soci.hu/blog/. However, the post is not in English (fortunately, C# is spoken internationally ) and it doesn’t […]

    Pingback by Error Check for MaxLength in Entity Framework | KarlZ — 2010.02.13. @ 18:57

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress