在通过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;" />
所以我已经阅读了Entity Framework one以及生成一个建议使用附加到EDMX文件的Entity Framework设计器的方法。但我没有EDMX文件。所以我很困惑我是否已经陷入某种疯狂的状态,或者是否有没有EDMX文件是正常的?
最终,我如何创建一个Entity Framework连接字符串,正确地使用我所引用的DLL所需的任何东西(上下文等)?
修改
我还应该补充一点,我没有看到任何csdl,ssdl文件似乎在这些字符串中被普遍引用...
答案 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类时创建(直到不会创建数据库)。