Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.

February 1, 2010 / by Zsolt Soczó

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

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?

Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.

LEAVE A COMMENT

4 COMMENTS

  • kpocza February 1, 2010

    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…)

  • Hamurabi February 2, 2010

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

  • safi February 13, 2010

    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