Entity framework 属性X的类型为Y,当前数据库提供程序不支持该类型

Entity framework 属性X的类型为Y,当前数据库提供程序不支持该类型,entity-framework,ef-core-2.1,Entity Framework,Ef Core 2.1,我是EF的新手(使用EF core 2.1),到目前为止,我一直在学习一系列教程,但现在我已经开始创建自己的数据库结构,并且在尝试向数据库中添加值时遇到了困难: private async Task<int> Insert() { var address = new Address { AddressLine1 = "1 any street", AddressLine2 = "", AddressLine3 = "", City = "Any city" };

我是EF的新手(使用EF core 2.1),到目前为止,我一直在学习一系列教程,但现在我已经开始创建自己的数据库结构,并且在尝试向数据库中添加值时遇到了困难:

private async Task<int> Insert()
{
    var address = new Address { AddressLine1 = "1 any street",  AddressLine2 = "", AddressLine3 = "", City = "Any city" };

    using (var context = new BranchContext())
    {
        context.Addresses.AddAsync(address);//ERROR HERE
        ....
    }
 }
创建了以下内容:

为了明确这是一个运行时错误,我查看了两个线程,它们在尝试更新数据库时出现了此错误,但它们的讨论并没有为我指明正确的方向(可能我忽略了明显的错误)


我如何解决这个问题?最好不要改变结构,尽管我很高兴知道是否有充分的理由这样做

最后这似乎是一个相当简单的答案,错误让我查看了我的类的结构,并试图找出哪里出了问题。问题是,在我的<代码> BrcWebValue/COD>(我没有考虑到我的问题中共享),我钩住了<代码> OnMe建模创建< /Cord>,并按需要设置地址

错误

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<EmployeeBranch>()
        .HasKey(s => new { s.BranchId, s.EmployeeId });
    modelBuilder.Entity<Branch>()
        .Property(s => s.Address).IsRequired();
    modelBuilder.Entity<Branch>()
        .Property(s => s.Name).IsRequired();

    base.OnModelCreating(modelBuilder);
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity()
.HasKey(s=>new{s.BranchId,s.EmployeeId});
modelBuilder.Entity()
.Property(s=>s.Address).IsRequired();
modelBuilder.Entity()
.Property(s=>s.Name).IsRequired();
基于模型创建(modelBuilder);
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<EmployeeBranch>()
        .HasKey(s => new { s.BranchId, s.EmployeeId });

    modelBuilder.Entity<Address>()
        .Property(s => s.AddressLine1).IsRequired();
    modelBuilder.Entity<Address>()
        .Property(s => s.Postcode1).IsRequired();
    modelBuilder.Entity<Address>()
        .Property(s => s.Postcode2).IsRequired();
    ...the other required elements...
    modelBuilder.Entity<Branch>()
        .Property(s => s.Name).IsRequired();

    base.OnModelCreating(modelBuilder);
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity()
.HasKey(s=>new{s.BranchId,s.EmployeeId});
modelBuilder.Entity()
.Property(s=>s.AddressLine1).IsRequired();
modelBuilder.Entity()
.Property(s=>s.Postcode1).IsRequired();
modelBuilder.Entity()
.Property(s=>s.Postcode2).IsRequired();
…其他必需元素。。。
modelBuilder.Entity()
.Property(s=>s.Name).IsRequired();
基于模型创建(modelBuilder);
}

假设:目标是使
地址成为
分支机构

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Branch>()
        .HasOne(s => s.Address)
        .WithMany()
        .IsRequired();
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity()
.HasOne(s=>s.Address)
.有很多
.IsRequired();
}

您可以使用Fluent API来配置关系是必需的还是可选的


来源:

在引用导航属性而不是约束或类似内容中的映射属性的愚蠢情况下,也可能会出现此错误:

modelBuilder.Entity<TheEntity>().HasKey(ma => new { ma.SomeKey, ma.NavPropInsteadOfProp });
modelBuilder.Entity();

不幸的是,错误还不够明确,但暂时从错误中注释出罪魁祸首将导致源头。

这就是我的原因。谢谢你在这里提到这一点。这有助于解决我的问题。谢谢,这正是我的处境。你至少为我节省了30分钟,这是一个非常棒的建议。你为我节省了很多时间,我也引用了导航属性…但不是为了定义键…这是在我试图映射到特定的列名时。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Branch>()
        .HasOne(s => s.Address)
        .WithMany()
        .IsRequired();
}
modelBuilder.Entity<TheEntity>().HasKey(ma => new { ma.SomeKey, ma.NavPropInsteadOfProp });