Does anyone know a way to auto-generate database tables for a given class? I’m not looking for an entire persistence layer – I already have a data access solution I’m using, but I suddenly have to store a lot of information from a large number of classes and I really don’t want to have to create all these tables by hand. For example, given the following class:
class Foo { private string property1; public string Property1 { get { return property1; } set { property1 = value; } } private int property2; public int Property2 { get { return property2; } set { property2 = value; } } }
I’d expect the following SQL:
CREATE TABLE Foo ( Property1 VARCHAR(500), Property2 INT )
I’m also wondering how you could handle complex types. For example, in the previously cited class, if we changed that to be :
class Foo { private string property1; public string Property1 { get { return property1; } set { property1 = value; } } private System.Management.ManagementObject property2; public System.Management.ManagementObject Property2 { get { return property2; } set { property2 = value; } } }
How could I handle this?
I’ve looked at trying to auto-generate the database scripts by myself using reflection to enumerate through each class’ properties, but it’s clunky and the complex data types have me stumped.
It’s really late, and I only spent about 10 minutes on this, so its extremely sloppy, however it does work and will give you a good jumping off point:
I put these classes in an assembly to test it:
And it generated the following SQL:
Some further thoughts…I’d consider adding an attribute such as [SqlTable] to your classes, that way it only generates tables for the classes you want. Also, this can be cleaned up a ton, bugs fixed, optimized (the FK Checker is a joke) etc etc…Just to get you started.