Entity framework 属性X的类型为Y,当前数据库提供程序不支持该类型
我是EF的新手(使用EF core 2.1),到目前为止,我一直在学习一系列教程,但现在我已经开始创建自己的数据库结构,并且在尝试向数据库中添加值时遇到了困难: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" };
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 });