【发布时间】:2013-10-11 15:00:36
【问题描述】:
这快把我逼疯了。我对 WPF/EF 相当陌生。
我有一个简单的 MVVM 应用程序,它通过 XAML 中的绑定将实体表读入 DataGrid。该应用程序编译良好。
我得到了这个未处理的异常,但是它锁定了设计器:
The specified named connection is either not found in the configuration, not intended to be used with the EntityClient provider, or not valid.
at System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)
at System.Data.EntityClient.EntityConnection..ctor(String connectionString)
at System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString)
XAML 无法创建我的视图模型的实例...
xmlns:vm="clr-namespace:Entity_MVVM"
Title="MainWindow" Height="600" Width="800"
DataContext="{DynamicResource MyViewModel}">
<Window.Resources>
<vm:CountrysViewModel x:Key="MyViewModel"/>
</Window.Resources>
这是我的视图模型“加载网格”方法:
public void LoadGrid()
{
var db = new LDBEntities();
using (var conn = new EntityConnection("name=LDBEntities"))
{
conn.Open();
EntityCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT VALUE c FROM LDBEntities.tbCountrys as c";
try
{
EntityDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.CloseConnection);
_CountrysModelObservableList.Clear();
while (rdr.Read())
{
var cCountryId = rdr["CountryId"].ToString();
var cShortName = rdr["shortName"].ToString();
var cLongName = rdr["longName"].ToString();
_CountrysModelView = new CountrysModel()
{
CountryId = cCountryId,
ShortName = cShortName,
LongName = cLongName
};
_CountrysModelObservableList.Add(_CountrysModelView);
}
}
catch(Exception e)
{
MessageBox.Show(string.Format("Can't read in data!"));
}
}
我的 App.config 中的连接字符串是在创建我的 EF 模型时创建的,并按预期填充 DataGrid。
任何想法是什么原因造成的?
周五下午的挫败感!谢谢
编辑:App.Config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="LDBEntities" connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=System.Data.SqlClient;provider connection string='Data Source=DMEA-T1000\SQLEXPRESS;Initial Catalog=LDB;Persist Security Info=True;User ID=sa;Password=PasswordHidden;MultipleActiveResultSets=True' " providerName="System.Data.EntityClient" /></connectionStrings>
</configuration>
【问题讨论】:
-
什么版本的 EF? 4?
-
IMO,使用这样的实体框架(就好像它是普通的旧 ADO.Net,带有所有这些魔术字符串和手动映射)完全违背了 ORM 的目的。
-
发布您的 App.config。发生这种情况的一种方式是,如果您的数据模型无法连接到源。这显然发生在运行时,这就是它编译良好的原因。
-
是的,我正在尝试了解由已离职开发人员编写的现有应用程序。我同意,我会使用 LINQ 而不是 EntityDataReader 等。
-
@hardgraf 代码全错了。删除它并正确重做它会节省您的时间和痛苦。
标签: c# wpf entity-framework xaml mvvm