Заполнение списка из базы данных с помощью Entity Framework
Я разрабатываю приложение.NET, и у меня есть проблема. Я пытаюсь заполнить список из базы данных MySQL с Entity Framework. Вот мой код:
public MainForm()
{
InitializeComponent();
try
{
hospitaldbEntities context = new hospitaldbEntities();
PatientlistBoxId.DataSource = context.patients;
PatientlistBoxId.DisplayMember = "FirstName";
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
Я прикрепляю изображение из Solution Explorer:
И, наконец, вот мой класс пациентов:
public partial class patient
{
public patient()
{
this.examinations = new HashSet<examination>();
this.diseases = new HashSet<disease>();
this.drugsensitivities = new HashSet<drugsensitivity>();
}
public int PatientID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public System.DateTime DateOfBirth { get; set; }
public string Gender { get; set; }
public string Address { get; set; }
public System.DateTime DateOfCreate { get; set; }
public string Category { get; set; }
public int CNP { get; set; }
public virtual ICollection<examination> examinations { get; set; }
public virtual ICollection<disease> diseases { get; set; }
public virtual ICollection<drugsensitivity> drugsensitivities { get; set; }
}
Спасибо за помощь заранее.
РЕДАКТИРОВАТЬ
Когда я пытаюсь запустить приложение, оно выдает ошибку:
1 ответ
Вы должны хотя бы использовать:
PatientlistBoxId.DataSource = context.patients.ToList();
Рассмотрите возможность использования BindingList
КСТАТИ:
Не используйте тип Entity в качестве ItemType для ListBox.
Рассмотрите возможность использования using
контекст, чтобы распоряжаться вашим контекстом, то есть более четко обрабатывать сферу вашего контекста.
========== ==========
Немного больше деталей
//this class allows to separate the winform (equivalent to a view) from
//the data layer, you can see it as a ViewModel
public class FormNamePatient {
public Int32 Id { get; set;}
public String FirstName { get; set;}
public String LastName { get; set;}
}
private BindingList<FormNamePatient> _patients;
try {
//the using guarantees the disposing of the resources
//(avoiding memory link and so on)
using ( hospitaldbEntities context = new hospitaldbEntities() ) {
_patients = new BindindList<FormNamePatient>(
context.patients.Select(
x => new FormNamePatient {
Id = x.Id,
FirstName = x.FirstName,
LastName = x.LastName,
}).ToList() // this materialize the list
// in other (bad ?) words, this allows the list
//to live out of the context (<=> using)
);
}
PatientlistBoxId.DataSource ) = _patients;
//now if you alter (not erase, but edit, change...) _patients you
//update the control
PatientlistBoxId.DisplayMember = "FirstName";
} catch (Exception ex) {
Console.WriteLine(ex);
}