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?
February 1st, 2010 at 8:39 pm
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…)
February 2nd, 2010 at 8:36 pm
1ik sor 2x van. 5letnek jó.
February 13th, 2010 at 10:03 am
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
February 13th, 2010 at 6:57 pm
[...] 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 [...]