我有以下连接字符串:
<?xml version="1.0" encoding="utf-8"?>
<connectionStrings>
<add name="MyContext" connectionString="metadata=res://*;provider=System.Data.SqlClient;provider connection string='data source=SQLSERVERDB;initial catalog=TestDB_CodeFirst;user id=***;password=***;MultipleActiveResultSets=True;App=EntityFramework'" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
当我尝试启用迁移时,我首先收到警告:
无法确定有效的启动项目。使用项目&#39; MyApp.Model&#39;来代替。
您的配置文件和工作目录可能未按预期设置 使用-StartUpProjectName参数显式设置一个。
然后我得到了这个例外:
参数&#39; xmlReader&#39;无效。必须至少提供一个.ssdl工件。
连接字符串是否错误?如果我使用Code First,为什么还需要ssdl?
注意
MyApp.Model
文件夹所在的Migrations
项目中。MyApp.Model
项目中只有一个连接字符串,它指向我的开发数据库。另外,我的第二个问题是:
如果我使用CF迁移,每次用户第一次选择其他数据库时,是否会迁移所有数据库?
修改
我改变了如下所述的连接,并得到以下异常:
具有身份的项目&#39; table1&#39;已经存在于元数据集合中。 参数名称:item
必须注意的是,我对现有数据库进行了逆向工程。所以我不知道可能出了什么问题!
我还删除了Migrations文件夹并检查了数据库,但没有创建migration_history表。
答案 0 :(得分:4)
您正在尝试使用设计用于Database First / Model First的connectionString。您可以告诉,因为您的providerName是System.Data.EntityClient而不是System.Data.SqlClient。
您的连接字符串应如下所示:
<connectionStrings>
<add name="MyContext"
connectionString="Data Source=SQLSERVERDB; Initial Catalog=TestDB_CodeFirst;user id=***;password=***;"
providerName="System.Data.SqlClient" />
</connectionStrings
虽然我建议使用Integrated Security而不是用户/密码。只是个人偏好。