В приведенном ниже коде я надеюсь, что правильно указал, что не так. Мне нужно иметь возможность вызывать item.departments.dept_Type, и это должно быть возможно из-за созданной мной ассоциации. Мне не нужно создавать внутренние соединения в запросе для получения данных, если я правильно понимаю. Это мой PersonClass
namespace DATALAYER.DataHandler
{
[Table(Name = "People")]
public class Person
{
private int _DepartmentID;
public EntityRef<Department> _Department;
public Person() { this._Department = new EntityRef<Department>(); }
private int _ID;
[Column(IsPrimaryKey =true, Storage = "_ID")]
public int ID
{
get { return this._ID; }
set { this._ID = value; }
}
private string _p_FirstName;
[Column(Storage = "_p_FirstName")]
public string p_FirstName
{
get { return this._p_FirstName; }
set { this._p_FirstName = value; }
}
private string _LastName;
[Column(Storage = "_LastName")]
public string p_LastName
{
get { return this._LastName; }
set { this._LastName = value; }
}
private string _EmailAddress;
[Column(Storage = "_EmailAddress")]
public string p_EmailAddress
{
get { return this._EmailAddress; }
set { this._EmailAddress = value; }
}
private string _Password;
[Column(Storage = "_Password")]
public string p_Password
{
get { return this._Password; }
set { this._Password = value; }
}
private string _SSID;
[Column(Storage = "_SSID")]
public string p_SSID
{
get { return this._SSID; }
set { this._SSID = value; }
}
private string _DOB;
[Column(Storage = "_DOB")]
public string p_DOB
{
get { return this._DOB; }
set { this._DOB = value; }
}
private string _CellNumber;
[Column(Storage = "_CellNumber")]
public string p_CellNumber
{
get { return this._CellNumber; }
set { this._CellNumber = value; }
}
[Column(Storage = "_DepartmentID", DbType = "Int")]
public int p_Department_dept_ID
{
get { return this._DepartmentID; }
set { this._DepartmentID = value; }
}
[Association(Storage = "_DepartmentID", ThisKey = "p_Department_dept_ID")]
public Department Department
{
get { return this._Department.Entity; }
set { this._Department.Entity = value; }
}
}
}
Это мой код отдела
namespace DATALAYER.DataHandler
{
[Table(Name = "Departments")]
public class Department
{
//private EntitySet<Person> _Person;
//public Department()
//{
// this._Person = new EntitySet<Person>();
//}
private int _DepartmentID;
[Column(IsPrimaryKey = true, Storage = "_DepartmentID")]
public int dept_ID
{
get { return this._DepartmentID; }
set { this._DepartmentID = value; }
}
private string _deptType;
[Column(Storage = "_deptType")]
public string dept_Type
{
get { return this._deptType; }
set { this._deptType = value; }
}
//[Association(Storage = "_Person", OtherKey = "ID")]
//public EntitySet<Person> Persons
//{
// get { return this._Person; }
// set { this._Person.Assign(value); }
//}
}
}
Проблема, о которой я думаю, заключается в том, что существует проблема с типами данных между первичным ключом человека и внешним ключом отделов. Но поскольку они оба int, я не понимаю, как это может быть проблемой.
Если кто-то может просто объяснить мою проблему ясновидящей, если я ошибаюсь или что-то в этом роде, или помогите мне с решением, пожалуйста.
Добавлен этот класс
namespace DATALAYER.DataHandler
{
public class SHSdb2 : DataContext
{
public Table<Person> People;
public Table<Department> Department;
//public Table<Address> Address;
public SHSdb2(string connection) : base(connection) { }
}
Без этого кода он работает, но тогда я могу вызывать только вещи внутри таблицы
[Column(Storage = "_DepartmentID", DbType = "Int")]
public int p_Department_dept_ID
{
get { return this._DepartmentID; }
set { this._DepartmentID = value; }
}
[Association(Storage = "_DepartmentID", ThisKey = "p_Department_dept_ID")]
public Department Department
{
get { return this._Department.Entity; }
set { this._Department.Entity = value; }
}
Что такое SHSdb2
? Вы В самом деле используете LINQ to SQL? Или, возможно, Entity Framework?
Когда он входит в foreach
SHSdb2 - это имя моего проекта, в котором не используется структура сущностей, недопустимая, поэтому я использую этот подход сопоставления Linq
добавил еще один класс, возможно, это поможет. Не уверен насчет примера Minimal, Compete и Verifiable. если вы скопируете это, вам, вероятно, просто понадобится база данных, и она должна работать ... Я думаю.
Вы скопировали его в консольное приложение, и оно сработало?
нет пытался ответить кому-то
Можете ли вы проверить тип данных каждого столбца таблиц базы данных с помощью свойств DTO.
Добавлены два изображения, тип данных в столбцах такой же, как и в базе данных, может быть проблема с строкой и nvarchar ???
В вашем операторе foreach проверьте, загружены ли свойства элемента (кроме связанного отдела) и могут ли быть распечатаны?
То, что я сделал это, не из-за отношения, если я удалю отношение, оно работает нормально, поэтому я подумал, что это должно быть с идентификатором
Я обновил код вверху
Похоже, я исправил это, не уверен, что это исправление, или мне просто повезло, если кто-то все еще может объяснить это мне, это было бы очень признательно.
var personQuery =
from per in db.People
where per.p_FirstName == "Christian"
select per.Department;
Я думаю, указав, что ему нужно получить данные из отдела, который он разрешил бы в foreach.
что происходит, когда вы выполняете свой код? где это на самом деле терпит неудачу?