【问题标题】:EntityFramework inclusion via NuGet confusion通过 NuGet 混淆包含 EntityFramework
【发布时间】:2014-04-17 04:37:17
【问题描述】:

在通过 NuGet 包含 EntityFramework 后,我感到非常困惑。所以我创建了一个名为 CustomModules 的项目,在里面我有我的数据库上下文:

public class Context : DbContext
{
    public virtual IDbSet<FreightCompany> Companies { get; set; }
    public virtual IDbSet<FuelSurcharge> FuelSurcharges { get; set; }
    public virtual IDbSet<Zone> Zones { get; set; }
    public virtual IDbSet<ZoneMapping> ZoneMappings { get; set; }
    public virtual IDbSet<Warehouse> Warehouses { get; set; }
    public virtual IDbSet<ShippingRate> ShippingRates { get; set; }
    public virtual IDbSet<Markup> Markups { get; set; }
}

我已经启用了迁移,并且所有这些都已被推送到数据库中。我现在想在 Web 应用程序中使用它。因此,我将连接字符串从 CustomModules.appconfig 复制到了我的 CMSApp.webconfig

此时,我尝试在 ASPX 页面上使用 EntityDataSource,发现我没有可供选择的命名容器。

所以我一直在阅读各种内容,发现有两种类型的连接字符串。一个典型的 ADO 和一个实体框架。我相信我刚刚拿到了 ADO:

<add name="Context" providerName="System.Data.SqlClient" connectionString="Persist Security Info=False;database=DS_Kentico;server=SERVER;user id=USER;password=PWD;Current Language=English;Connection Timeout=240;" />

所以我已经阅读了实体框架一和生成方法,建议使用附加到 EDMX 文件的实体框架设计器。但我没有 EDMX 文件。所以我很困惑我是否以某种方式让自己陷入了某种疯狂状态,或者没有 EDMX 文件是否正常?

最终我该如何创建一个实体框架连接字符串,它可以从我引用的 DLL 中正确使用它需要的任何东西(上下文等)?

编辑

我还应该补充一点,我看不到这些字符串中似乎经常引用的任何 csdl、ssdl 文件...

【问题讨论】:

  • 当您使用 Code First 时,没有模型文件。类和上下文是您的模型。所以是的,没有模型文件是正常的。因此,问题必须与您的实体或上下文的引用或可访问性(公共与私有)有关。如果您将包含一两个类的上下文文件复制到 Web 应用程序项目中,会发生什么情况?这种情况下可以用吗?
  • @JotaBe:谢谢。我相信我今天找到了答案,那就是你不能使用配置。相反,使用 CodeFirst 时有不同的绑定方式。

标签: visual-studio-2012 entity-framework-6


【解决方案1】:

要使用代码优先方法,您需要以不同的方式编写连接字符串(假设使用 LocalDb 和 MDF 文件将附加到您的 App_Data 解决方案的文件夹):

   <add name="SomeContext"
         connectionString="Data Source=(LocalDb)\v11.0;AttachDBFileName=|DataDirectory|\YOURNAME.mdf;Initial Catalog=YOURNAME;Integrated Security=SSPI"
         providerName="System.Data.SqlClient"/>

如果您的连接字符串与 EF 约定(上下文)不同,则需要通过 DbContext 基础构造函数上的参数传递连接字符串值:

public FinappDb(): base("MyDbConnString") { } /* It is not like the convention */

您还需要为 localDb 配置连接工厂:

  <entityFramework>
     <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>

您的数据库应在您第一次从代码创建 DbContext 类时创建(直到不会创建数据库)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2017-09-24
    • 2011-01-29
    • 2013-03-21
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    相关资源
    最近更新 更多