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
.First().BaseEntitySets.OfType
foreach (EntitySet es in sspaceEntitySets)
{
foreach (EdmProperty p in es.ElementType.Properties)
{
ReadOnlyMetadataCollection
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
}
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
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…)
1ik sor 2x van. 5letnek jó.
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