我需要用未知大小的字符串、整数或其他数组创建 SQL 表。最好的方法是为它创建单独的表。像这样(伪代码如下,我不知道我是否正确使用了“主键”):
public class DataBase : DataContext
{
public Table<UserAccount> users { get { return GetTable<UserAccount>(); } }
public Table<UserAccount_roles> userroles { get { return GetTable<UserAccount_roles>(); } }
}
[Table]
public class UserAccount
{
[Column(IsPrimaryKey = true)]
public string username;
[Column]
public string password;
}
[Table]
public class UserAccount_roles
{
[Column(IsPrimaryKey = true)]
public string userName;
[Column(IsPrimaryKey = true, IsDbGenerated = true)]
public int roleIdx;
[Column]
public int arrayValue;
}
但是,这感觉很笨拙,因为如果我不应该担心 SQL 实现,那么 UserAccount_roles 可能只是 UserAccount 类中的简单“List<> 角色”。
我宁愿做这样的事情:
public class DataBase : DataContext
{
public Table<UserAccount> users { get { return GetTable<UserAccount>(); } }
}
[Table]
public class UserAccount
{
[Column(IsPrimaryKey = true)]
public string username;
[Column]
public string password;
[MyColumn]
public MySQLList<DataBase, int> roles;
}
我想过做“ class MySQLList<B, T> : List<T>
”。在数据库类(“B”)中,我做了一些静态方法来授予对正确数据库的访问权限。然后在 MySQLList 中,我通过重载 List<> -方法来操作数据库。这应该会导致“在后台”构建和访问表 UserAccount_roles,因为程序员(主要是我)在自定义 List<> 上看到的只是简化的解决方案。
我的实际问题是:
- 我敢打赌,有一些现成的实现。我在哪里可以找到一个?
- 我认为我无法在 MySQLList<> 中执行任何“[table] class MyTable”-declarations。我是否必须在那里进行实际的 SQL 语言编码,或者有什么方法可以在编译/运行时创建 Linq to SQL 类和属性的东西?
- 这种方法有什么一般性的警告吗?-)