entity-framework - EF7 脚手架不创建列

标签 entity-framework database-migration entity-framework-core entity-framework-migrations

我有一个如下所示的模型:

public class Order
{
    // removed irrelevant other properties
    public Guid Id { get; set; }
    public Address BuyerAddress { get; set; }
    public Address SellerAddress { get; set; }
}

public class Address
{
    public Guid Id { get; set; }
    public string Street { get; set; }
    public Order Order { get; set; }
}

在 DbContext 中,我将它们连接起来,如下所示:

entityTypeBuilder.HasOne(x => x.BuyerAddress).WithOne(x => x.Order).IsRequired(false);
entityTypeBuilder.HasOne(x => x.SellerAddress).WithOne(x => x.Order).IsRequired(false);

当我运行时

dnx ef migrations add Foo
dnx ef database update

正在使用某些属性创建表,但缺少其他属性,例如 SellerAddress(尽管 BuyerAddress 创建得很好)。

其他实体也存在同样的问题,例如 User <-> BankAccount ,它是 1:1 关系,定义为 entityTypeBuilder.HasOne(x => x.BankAccount).WithOne(x => x.User).IsRequired(false);

有人知道怎么回事吗?我正在使用 Entity Framework 7.0.0-rc1-final。这个问题让我抓狂。

最佳答案

我解决了这个问题。首先,我有外键属性,所以我的模型如下所示:

public Order Order {get;set;}
public Guid OrderId {get;set;}

我不喜欢这样,它会导致数据库中出现重复的列,因此我从模型中删除了 [EntityName]Id 属性。但正因为如此,EF变得很困惑,无法再弄清楚我到底想做什么。因此,对于所有 1:1 关系,我只是删除了等式一侧的导航属性(因此现在 Order 具有对 Address 的引用,但 Address 不再具有返回 Order 的导航属性)。这解决了问题。

因此,对于我问题中的示例代码,我从 Address 中删除了 Order 属性。

关于entity-framework - EF7 脚手架不创建列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35042676/

相关文章:

c# - 有什么方法可以模拟直接在方法中创建新连接的 Entity Framework 调用

mysql - mysql版本变更会影响迁移吗?

amazon-web-services - 如何在我账户的 DMS 中使用不同 AWS 账户的 S3 存储桶?

entity-framework-core - 在 EF Core 运行时创建表

c# - 模拟 EF 核心 dbcontext 和 dbset

entity-framework - 对象层类型 'MyProject.Model.Applications' 已经有一个生成的代理类型

c# - 使用 dropdownlist 将新数据添加到多个表

c# - 使用 Entity Framework 为 CRUD 操作实现通用存储库时出错

sql - Grails数据库迁移-如何删除特定行?

asp.net-core - 由于异常 'A second operation started on this context before a previous',无法以静态方法在 ASP.NET Core 中播种数据