数据库优先的 EF .NET 6 数据注释:无法使注释工作

问题描述 投票:0回答:1

这是一个模型类(由脚手架生成,没有任何改变):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace EFDBFirst.Models
{
    public partial class Product
    {
        public Product()
        {
            OrderDetails = new HashSet<OrderDetail>();
        }

        public int ProductId { get; set; }
        public string ProductName { get; set; } = null!;
        public int? SupplierId { get; set; }
        public int? CategoryId { get; set; }        
        public string? QuantityPerUnit { get; set; }
        public decimal? UnitPrice { get; set; }
        public short? UnitsInStock { get; set; }
        public short? UnitsOnOrder { get; set; }
        public short? ReorderLevel { get; set; }
        public bool Discontinued { get; set; }

        public virtual Category? Category { get; set; }
        public virtual ICollection<OrderDetail> OrderDetails { get; set; }
    }
}

为了在运行后保留数据注释属性

scaffold-dbcontext
,我假设我会

  1. 创建一个元数据类,如下所示:
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Diagnostics;

namespace EFDBFirst.Models
{    
    public partial class ProductMetadata
    {
        [Required(ErrorMessage = @"Qty/Unit is required")]
        [Display(Name ="QPU")]
        public string? QuantityPerUnit { get; set; }
    }
}
  1. 创建一个部分
    Product
    类,我在其中链接元数据类:
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace EFDBFirst.Models
{
    [MetadataType(typeof(ProductMetadata))]
    public partial class Product
    {
    }
}

但是显示名称不显示,并且未强制执行必需的属性。

我已经做过的事情:

  • 清洁和重建
  • 清除浏览器缓存并尝试不同的浏览器
  • 关闭并重新打开 Visual Studio 2022
  • 确保命名空间和类可访问性完全匹配

顺便说一句,如果我将属性直接添加到原始模型类中,一切都会按预期工作。

有什么想法吗?我一生都无法弄清楚这里发生了什么……

entity-framework asp.net-core-mvc .net-6.0 data-annotations
1个回答
0
投票

MetadataType
已经过时了,我们将使用
ModelMetadataType
代替。得到OP的确认可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.