Tag: 代码优先

无法使用migrate.exe运行代码首次迁移

我正在尝试更新测试系统上的数据库。 当我在visual studio中运行update-database ,事情按预期工作。 当我部署然后尝试在测试机器上运行时: Migrate.exe CodeFirst.dll /startupConfigurationFile=”..\web.config” 我明白了: 在应用程序配置文件中找不到名为xxx的连接字符串 …即使web.config中有一个带有该名称的连接字符串。 只有一个.config文件,没有我正在运行的dll的配置文件 我试图手动声明我的连接字符串: Migrate.exe CodeFirst.dll /connectionString=”Data Source=192.168…;Initial Catalog=Database;” /connectionProviderName=”System.Data.SqlClient” 但由于某种原因仍然给出了相同的错误…它是否忽略了我传入的连接字符串并试图再次寻找一个? 为什么会这样做? 但这给了我一个非常奇怪的错误: 迁移配置类型“Source = 192.168 …在程序集CodeFirst.dll中找不到我想知道它是否与空格有关,所以我尝试将’数据源’更改为’服务器’并将初始目录更改为’数据库’但这没有帮助。 编辑:固定引号 我见过类似的问题,但他们都是关于在视觉工作室内运行的,我在试图做到这一点时没有任何问题。 关于我能做什么的更多想法? 有没有人得到这些选项中的任何一个?

EF代码优先:如何在跟踪DDD时从实体的Collection中删除一行?

所以这是场景: DDD声明您使用存储库来获取聚合根,然后使用它来添加/删除它拥有的任何集合。 添加很简单,您可以在要添加的Collection上简单地调用.Add(Item item) 。 保存时,会在数据库中添加一个新行。 但是,删除是不同的 – 调用.Remove(Item item)不会从数据库中删除该项,它只是删除外键。 所以,虽然,是的,它在技术上不再是集合的一部分,它仍然在数据库中。 阅读,唯一的解决方案是使用数据上下文删除它。 但根据DDD,域对象不应该知道数据上下文,因此删除必须在域外进行。 什么是正确的方法? 或者让数据库中的孤儿可以接受(也许是运行例程来清除它们)?

更改外键约束命名约定

我们有自己的命名对象的外部约定,我需要更改自动生成的外键约束的命名约定。 现在它看起来像: FK_dbo.City_dbo.CityType_City_CityTypeId但我希望它被称为City_FKC_CityType 。 我发现了一个类似的问题 ,说你可以手动更改约束的名称。 但是,这不适合我,因为我有很多表和外键约束。 我找到了一些关于“自定义代码优先约定”的信息,我想知道我是否可以使用此更改约束的名称,或者是否有任何方法来实现它? 另一个变体是下载EF的源代码,进行更改并使用它,但是在紧急情况下。 作为旁注,我还想更改主键的命名约定。

首先影响EF代码中的外键列命名(CTP5)

我有一个POCO类,它与另一个类有两个单向一元关系,两个类共享一个祖先。 生成的模式中的外键名称不反映属性名称。 (属性MainContact和FinancialContact给出PersonId和PersonId1字段名称)。 如何影响模式生成以生成与属性名称匹配的数据库列名? 该模型如下所示: 代码如下所示: public class CustomerContext: DbContext { public DbSet Organisations { get; set; } public DbSet Persons { get; set; } protected override void OnModelCreating(ModelBuilder builder) { DbDatabase.SetInitializer(new DropCreateDatabaseAlways()); } } public abstract class Customer { public int Id { get; set; } public string Name { get; set; } } […]