通过NuGet混淆包含EntityFramework

时间:2014-04-07 15:02:25

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

在通过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,发现我没有可供选择的命名容器。

enter image description here

所以我一直在阅读各种类型,并且遇到了两种类型的连接字符串这一事实。典型的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;" />

所以我已经阅读了Entity Framework one以及生成一个建议使用附加到EDMX文件的Entity Framework设计器的方法。但我没有EDMX文件。所以我很困惑我是否已经陷入某种疯狂的状态,或者是否有没有EDMX文件是正常的?

最终,我如何创建一个Entity Framework连接字符串,正确地使用我所引用的DLL所需的任何东西(上下文等)?

修改

我还应该补充一点,我没有看到任何csdl,ssdl文件似乎在这些字符串中被普遍引用...

1 个答案:

答案 0 :(得分:0)

要使用代码优先方法,您需要以不同的方式编写连接字符串(假设使用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约定(Context)不同,则您需要通过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类时创建(直到不会创建数据库)。