我使用 dotnet ef scaffold 从现有数据库生成模型类 的" Microsoft.EntityFrameworkCore.Tools"
一切正常,模型按照预期生成数据注释,asp.net控制器返回Json没有问题。
使用[JsonIgnore]
装饰器有助于删除我不希望api返回的字段。 (比如Id等)
我想使用一个部分类,当你搭建一个新的DbContext时不会被覆盖。(如果它可以在另一个程序集中,则可以获得奖励) Newtonsoft让我处理空值,日期和引用循环 - 我希望所有的好处与EF的所有注释分开。
我知道还有其他技术,但这似乎是Partial类的一个很好的用例...就像ASP.Net MVC附带的jQuery不引人注目的验证一样......但我已经点击了这个问题上的障碍......所以这甚至是可能的,或者我错过了一些明显的东西:|
实体框架生成的模型
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Newtonsoft.Json;
namespace SomeNamespace
{
public partial class Media
{
public int Id { get; set; }
public int SiteId { get; set; }
public Guid Ref { get; set; }
[Required]
[StringLength(2000)]
public string Url { get; set; }
public string Caption { get; set; }
[ForeignKey("SiteId")]
[InverseProperty("Media")]
public Site Site { get; set; }
}
}
部分班级
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.AspNetCore.Mvc; // "ModelMetadataType"
using Newtonsoft.Json;
namespace SomeNamespace
{
[ModelMetadataType(typeof(MediaMetaData))]
public partial class Media
{
}
public partial class MediaMetaData
{
[JsonIgnore]
public int Id { get; set; }
[JsonIgnore]
public int SiteId { get; set; }
[JsonIgnore]
public Site Site { get; set; }
}
}
:( =>更新:2018年1月23日
我收到了这个答案的评论How to use ASP.Net core ModelMetadata attribute
"因为您正在尝试使用派生类的元数据类型 重命名基本类型"
中的属性
我可以欣赏Liskov,但后来是Partial Class实际上是一个派生类??
我不能的是[JsonIgnore]
在EF模型中的应用效果如此......
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.AspNetCore.Mvc; // "ModelMetadataType"
using Newtonsoft.Json;
namespace SomeNamespace
{
public partial class Media
{
[JsonIgnore]
public int Id { get; set; }
[JsonIgnore]
public int SiteId { get; set; }
public Guid Ref { get; set; }
[Required]
[StringLength(2000)]
public string Url { get; set; }
public string Caption { get; set; }
[JsonIgnore]
[ForeignKey("SiteId")]
[InverseProperty("Media")]
public Site Site { get; set; }
}
}
并产生以下内容......
{
"ref": "0c0e1475-63a1-41ce-9c6f-b4be6afd516a",
"url": "https://drive.com/images/fb65a200",
"caption": "bla bla"
}
它是我想要的......但是在使用代码生成时会被覆盖(部分类应该解决的问题)
但是通过使用上面的原始问题中的部分类,我得到了这个......
{
"id": 7,
"siteId": 2000,
"ref": "0c0e1475-63a1-41ce-9c6f-b4be6afd516a",
"url": "https://drive.com/images/fb65a200",
"caption": "bla bla",
"site": {...}
}