【问题标题】:Entity Framework Core - Fluent API not configuring modelEntity Framework Core - Fluent API 未配置模型
【发布时间】:2020-03-09 06:37:25
【问题描述】:

我一直在尝试让 fluent API 工作以配置我的模型。我找不到问题所在。 它似乎没有强制执行任何约束,但我可以看到创建模型时运行的代码。文档说 Fluent API 将覆盖任何以前的注释,即优先。

当我在模型中使用数据注释时,一切正常。 这是一个有效的代码示例(在模型中 - 数据注释中)与不有效的代码示例(在上下文中 - OnModelCreating)。

//In Model
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text.Json.Serialization;

namespace ParkingPermitData.Models
{

    public class PermitPurchase
    {
        public int PermitPurchaseId { get; set; }
        [Required]
        public string ParkingPermitNumber { get; set; }
        public string PurchaserName { get; set; }
    }
}

//In Context
using Microsoft.EntityFrameworkCore;
using ParkingPermitData.Models;
namespace ParkingPermitData.Data
{
    public class ParkingPermitContext : DbContext
    {
        public ParkingPermitContext(DbContextOptions<ParkingPermitContext> options) : base(options)
        {
        }

        public DbSet<PermitPurchase> PermitPurchases { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<PermitPurchase>().ToTable("PermitPurchase");

            modelBuilder.Entity<PermitPurchase>()
                .Property(b => b.ParkingPermitNumber)
                .IsRequired();

        }
    }
}

我已经尝试将 OnModelCreating 中的代码作为单个语句以及我在示例中找到的许多其他变体。 我试图设置一些比这更复杂的关系和注释,但想知道为什么它们不起作用,然后尝试了这个非常简单的案例。 这非常令人沮丧,如果能提供任何帮助,我将不胜感激。

需要注意的一点是,我在早期开发中将 InMemoryDatabase 用于 DBContext。

//Startup
public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ParkingPermitContext>(opt =>
                            opt.UseInMemoryDatabase("ParkingPermitPurchases"));
    services.AddControllers();
}

非常感谢, 保罗

【问题讨论】:

  • 那么,使用此设置,您仍然可以插入 ParkingPermitNumber 设置为 null 的记录吗?此外,一旦使用 fluent API,就无需使用属性 [Required]
  • 是的,奥莱格。我的想法完全正确,这是我的问题。如果我注释掉或删除 [Required] 我可以插入空值。如果我调试,我可以看到正在执行的代码。

标签: c# entity-framework-core


【解决方案1】:

内存数据库忽略数据库约束,因为它不是关系数据库。特别是

InMemory 将允许您在关系数据库中保存违反参照完整性约束的数据。

documentation

有关支持的更多信息

【讨论】:

  • 谢谢 tchrikch。看来非常有用的节省时间的东西花了我一些时间。
猜你喜欢
  • 1970-01-01
  • 2019-05-12
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
  • 2023-01-25
  • 1970-01-01
相关资源
最近更新 更多