【问题标题】:How to create an EntityConnection如何创建实体连接
【发布时间】:2011-05-29 04:05:24
【问题描述】:

我有一个包含多个项目的解决方案。

一个项目是我的 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);
  }
}

【问题讨论】:

  • 仅供参考:我在一年前在 SO 上找到了这篇文章,但无法让它为我工作stackoverflow.com/questions/3491165
  • 对于任何偶然发现此问题的人,这里有很多代码:dotnetframework.org/default.aspx/4@0/4@0/DEVDIV_TFS/Dev10/… 就我个人而言,如果你想访问现有的实体,我会说把它搞砸并使用 SqlConnection conn = context.Database.Connection as SqlConnection; 并通过 ADO 进行操作框架连接。如果您想在保留实体框架的同时进行单独的连接,您可以为它分配一个ConnectionStringSqlConnection

标签: c# wpf entity-framework


【解决方案1】:

对于其他人,我发现了如何做到这一点。

在我的静态 DataClass 中,我创建了以下例程来为我生成 Entity Connection String

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 字符串。

如果有人想使用它,他们应该在异常处放置一个断点,抛出它,或者以某种方式处理它。 Console.WriteLine() 仅供我调试。

我为我的应用程序创建了 实体连接字符串,如下所示:

public static readonly string EntityConnString =
  BuildEntityConnString("sqlCeDb.sdf", "myModel", "abc123~Funky");

希望其他人能从中有所收获。

【讨论】:

    【解决方案2】:

    关于如何创建 EntityConnection 的说明(实际上是更多示例)可以在 MSDN 上找到:

    http://msdn.microsoft.com/en-us/library/bb738533.aspx

    看起来和你的很相似。

    【讨论】:

      猜你喜欢
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多