我有一个包含多个项目的解决方案。
一个项目是我的DataAccess项目,其中定义了2个SQL CE数据库,一个用于本地用户,另一个用于公司数据,两者都具有类似的表结构。为每个数据库定义公共,静态,只读字符串,并且可以建立连接。
另一个项目是我的WPF项目,它将(最终)显示我的数据。为了在这里显示数据,我尝试创建一个实体上下文对象,但似乎没有任何工作。
什么阻止我访问其他项目中的数据? (目前,未定义错误状态'数据源')
我该如何解决?
AbcEntities abcContext;
public MainWindow() {
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e) {
try {
EntityConnection ec = new EntityConnection(DataClass.AbcConnectionString);
abcContext= new AbcEntities(ec);
listbox1.ItemsSource = from c in abcContext.Customers select c;
abcCustomersBox.DisplayMemberPath = "Name";
} catch (Exception err) {
MessageBox.Show(err.Message);
}
}
答案 0 :(得分:2)
对于其他人,我发现了如何做到这一点。
在我的静态 DataClass 中,我创建了以下例程来为我生成实体连接字符串:
static string BuildEntityConnString(string dbFileName, string resourceData, string password) {
string resAll = @"res://*/";
string dataSource = @"Data Source=|DataDirectory|\" + dbFileName;
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.Metadata = string.Format("{0}{1}.csdl|{0}{1}.ssdl|{0}{1}.msl", resAll, resourceData);
entityBuilder.Provider = "System.Data.SqlServerCe.3.5";
if (String.IsNullOrEmpty(password)) {
entityBuilder.ProviderConnectionString = dataSource;
} else {
entityBuilder.ProviderConnectionString = dataSource + ";Password=" + password;
}
using (EntityConnection con = new EntityConnection()) {
try {
con.ConnectionString = entityBuilder.ToString();
con.Open();
Console.WriteLine("{0} Entity String created.", dbFileName);
con.Close();
return con.ConnectionString;
} catch (Exception err) {
Console.WriteLine(err);
}
}
return null;
}
请注意,如果有任何错误,则返回NULL String。
如果有人想要使用它,他们应该在Exception上放置一个断点,抛出它,或以某种方式处理它。 Console.WriteLine()
仅供我调试。
我为我的应用程序创建了实体连接字符串,如下所示:
public static readonly string EntityConnString =
BuildEntityConnString("sqlCeDb.sdf", "myModel", "abc123~Funky");
希望别人能从中获得一些好处。
答案 1 :(得分:1)
可以在MSDN上找到有关如何创建EntityConnection的解释(更多示例,实际上):
http://msdn.microsoft.com/en-us/library/bb738533.aspx
看起来与你的相似。