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<EntityContainer>(DataSpace.SSpace)
       .First().BaseEntitySets.OfType<EntitySet>();

foreach (EntitySet es in sspaceEntitySets)
{
    foreach (EdmProperty p in es.ElementType.Properties)
    {
        ReadOnlyMetadataCollection<Facet> 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<BusinessEntity>("AdventureWorks2008Entities3.BusinessEntities").ToTraceString();
}

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

4 Responses to “EF SSDL alapú felhasználói bemenet ellenőrzés”

  1. kpocza Says:

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

  2. Hamurabi Says:

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

  3. safi Says:

    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

  4. Error Check for MaxLength in Entity Framework | KarlZ Says:

    [...] 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 [...]

Leave a Reply