簡體   English   中英

Entity Framework Core - Fluent API 未配置模型

[英]Entity Framework Core - Fluent API not configuring model

我一直在嘗試使用 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();
}

非常感謝,保羅

在內存中,數據庫無視 db 約束,因為它不是關系數據庫。 特別是

InMemory 將允許您保存在關系數據庫中違反參照完整性約束的數據。

查看文檔

有關支持的內容的更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM