Ist es möglich, die maximale Spaltenlänge für einen VARCHAR, CHAR usw. zu erhalten?
Antworten
Zu viele Anzeigen?
mackenir
Punkte
10342
Hier ist ein Weg, der den Kontakt mit der Datenbank vermeidet:
- Ermitteln Sie mithilfe von Reflection die Eigenschaft der Entitätsklasse, die der betreffenden Spalte entspricht.
- Rufen Sie dann das Attribut System.Data.Linq.Mapping.Column der Eigenschaft ab.
- Analysieren Sie dann die DbType-Eigenschaft dieses Attributs (z. B. NVarChar(255) NOT NULL ), um die Spaltenlänge zu erhalten.
TcKs
Punkte
24671
ctrlalt3nd
Punkte
1302
Hier wird geantwortet:
Linq to SQL - Zugrundeliegende Spaltenlänge
Ich fand es aber schöner, das zu ändern:
public static int GetLengthLimit(Type type, string field) //definition changed so we no longer need the object reference
//Type type = obj.GetType(); //comment this line
Und rufen Sie an:
int i = GetLengthLimit(typeof(Pet), "Name");
Fällt jemandem eine Möglichkeit ein, den Feldbezug stark zu typisieren?
Keith Barrows
Punkte
24064
public static int GetLengthLimit(Model.RIVFeedsEntities ent, string table, string field)
{
int maxLength = 0; // default value = we can't determine the length
// Connect to the meta data...
MetadataWorkspace mw = ent.MetadataWorkspace;
// Force a read of the model (just in case)...
// http://thedatafarm.com/blog/data-access/quick-trick-for-forcing-metadataworkspace-itemcollections-to-load/
var q = ent.Clients;
string n = q.ToTraceString();
// Get the items (tables, views, etc)...
var items = mw.GetItems<EntityType>(DataSpace.SSpace);
foreach (var i in items)
{
if (i.Name.Equals(table, StringComparison.CurrentCultureIgnoreCase))
{
// wrapped in try/catch for other data types that don't have a MaxLength...
try
{
string val = i.Properties[field].TypeUsage.Facets["MaxLength"].Value.ToString();
int.TryParse(val, out maxLength);
}
catch
{
maxLength = 0;
}
break;
}
}
return maxLength;
}
1 Stimmen
Möchten Sie die maximal mögliche Länge für die Spalten wissen, z. B. 1000 für varchar(1000) oder die maximale Länge der Werte in dieser Spalte?