Определенно это не так, но я нашел эту ошибку довольно распространенной и неочевидной. Целью FOREIGN KEY
может быть не PRIMARY KEY
. Ответ, который мне пригодится, - это:
ИНОСТРАННЫЙ КЛЮЧ всегда нужно указывать на истинное поле PRIMARY KEY другой таблицы.
CREATE TABLE users(
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(40));
CREATE TABLE userroles(
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
FOREIGN KEY(user_id) REFERENCES users(id));
Наличие имени класса в строке недостаточно, чтобы создать свой экземпляр. На самом деле вам понадобится полное пространство имен, включая имя класса, для создания объекта.
Предполагая, что у вас есть следующее:
string className = "MyClass";
string namespaceName = "MyNamespace.MyInternalNamespace";
Чем вы можете создать экземпляр этого class, объект класса MyNamespace.MyInternalNamespace.MyClass
, используя любой из следующих методов:
var myObj = Activator.CreateInstance(namespaceName, className);
или это:
var myObj = Activator.CreateInstance(Type.GetType(namespaceName + "." + className));
Надеюсь, что это поможет, пожалуйста, дайте мне знать, если нет.
Класс Activator выполняет это задание в .net, и этот метод очень полезен для сценариев зависимостей инъекций.
string NameSpace = "ProjectName.YourNameSpace";
string ProbeClass = "CLassName";
ObjectHandle ProberHandle = Activator.CreateInstance(NameSpace, ProbeClass) as ObjectHandle;
ClassName Prober = ProberHandle.Unwrap() as ClassName;
Убедитесь, что вы развернете перед типом каста, иначе он даст ошибку преобразования.
string frmName = "frmCustomer";
//WorldCarUI. is the namespace of the form
Type CAType = Type.GetType("WorldCarUI." + frmName );
var myObj = Activator.CreateInstance(CAType);
Form nextForm2 = (Form)myObj;
nextForm2.Show();
это работает.
С уважением, Avi
самый простой способ - использовать Activator. Введите имя класса в GetType и создайте новый экземпляр.
ClassInstance s1 = (ClassInstance)Activator.CreateInstance(Type.GetType("App.ClassInstance"));
public class ClassInstance
{
public string StringData { get; set; }
}
С уважением, Nik