将cmbx强制转换到数据库实体时出现异常

本文关键字:实体 异常 数据库 cmbx 转换 | 更新日期: 2023-09-27 17:59:24

这是我第一次写作,希望你不要评判太多!:)

我也会彻底的让你完全理解。

我创建了一个包含几个表的数据库,其中一个表是Genre。我将ADO.NET实体数据模型用于与给定数据库的WPF连接。我已经在GenreDal中创建了一个删除选定流派的方法。制作了一个包含流派(名称)和删除按钮的组合框。在点击事件中,我键入

{
   Genre g = (Genre)comboboxGenre.SelectedItem; 
   GenreDal d = new GenreDal(); 
   d.RemoveGenre(g); 
}

之后,我运行并测试了应用程序,但每次都会弹出一个异常。说它是

无法将"System.String"转换为"MusicStoreApp"

我不明白,希望你们能帮忙!如果您需要更多信息,只需询问即可。

将cmbx强制转换到数据库实体时出现异常

来自组合框Zaner.Itemssource=d.ShowGenres()。选择(p=>p.GenreName);`若要绑定到IEnumerableOFSTRING,就必须绑定到模型的列表。列出

comboboxZanr.Itemssource = d.ShowGenres();

然后你可以做

 Genre g = (Genre)comboboxGenre.SelectedItem; 
   GenreDal d = new GenreDal(); 
   d.RemoveGenre(g); 

谢谢大家,在的帮助下,我接受了每一个建议,并将其结合起来,最终解决了问题

cmbx.DisplayMemberPath = "GenreName";
cmbx.SelectedValuePath = "GenreId";

tnx再次:)

你在帖子中说制作了一个带有流派(名称)的组合框,并点击删除按钮。。。这意味着你的组合框是string的集合,因此SelectedItem会为你获得当前选择的流派名称,即string,并且由于它不是Genre类型,因此显然不能广播回Genre对象。

解决方案:

要么用List<Genre>作为数据源构建组合框。

或者,从组合框中获取选定的流派名称,然后获取特定的流派(如)

string genrename = comboboxGenre.SelectedItem;
Genre g = db.Genres.Single(g => g.Name == genrename);

**考虑到流派名称是唯一的,否则Single()将抛出异常。