如何解决为什么我的实体框架核心数据库优先模型自定义在重新脚手架更改后就消失了?任何解决方案
我正在使用ASP.Net Core 2.1,并且遇到了问题。我一直在致力于实现数据库优先应用程序。最初的Scaffold-DbContext命令可以正常工作,并且可以正确创建我的所有实体。之后,我对用于验证的模型文件进行了一些更改。我的DBA对数据库进行了新更改,因此我重新对数据库进行了脚手架。然后,我注意到重新脚手架会覆盖我添加到所有模型文件中的所有自定义代码。 有什么办法可以重新搭建数据库,但是只能通过ASP.Net Core DB First Approach中的DBA更改那些文件? 每当我遇到这个问题时。 我用以下命令重新搭建支架:
Scaffold-DbContext“服务器= 192.168.46.101;数据库= dbnAME;用户ID = USERID;密码= PASSWORD” Microsoft.EntityFrameworkCore.sqlServer -ContextDir数据-OutputDir模型-UseDatabaseNames -force
//Custom Annotation
[Key]
public int COLORCODE { get; set; }
//Custom Validation
[required(ErrorMessage = "Color Name can not be empty")]
public string COLOR { get; set; }
public string REMARKS { get; set; }
重新搭建我的代码后,就像:
public int COLORCODE { get; set; }
public string COLOR { get; set; }
public string REMARKS { get; set; }
我的Program.cs文件:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext,logging) =>
{
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
logging.AddDebug();
logging.AddEventSourceLogger();
logging.AddNLog();
})
.UseStartup<Startup>();
}
我的Startup.cs文件:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.ConfigureApplicationCookie(options =>
{
options.AccessDeniedpath = new PathString("/Administrator/AccessDenied");
});
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
// options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<Context>(options =>
options.UsesqlServer(
Configuration.GetConnectionString("ConnectionName")));
services.AddIdentity<IdentityUser,IdentityRole>(options =>
{
options.Password.requiredLength = 15;
options.Password.requiredUniqueChars = 5;
options.Password.RequireNonAlphanumeric = false;
options.SignIn.RequireConfirmedEmail = true;
options.Tokens.EmailConfirmationTokenProvider = "CustomEmailConfirmation";
options.Lockout.MaxFailedAccessAttempts = 5;
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(15);
})
.AddEntityFrameworkStores<Context>()
.AddDefaultTokenProviders()
.AddTokenProvider<CustomEmailConfirmationTokenProvider<IdentityUser>>("CustomEmailConfirmation");
// REGISTER ExtractEMService
ExtractEMService.ExtractEMRegisterService(services);
//services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddMvc(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new Authorizefilter(policy));
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app,IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseStatusCodePagesWithReExecute("/Error/{0}");
//app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",template: "{controller=Basic}/{action=BasicColors}/{id?}");
});
}
}
解决方法
您无法做到这一点,只能将生成的类保持不变,并使用伙伴类进行数据注释:
[MetadataType(typeof(MetaData))]
public partial class Person
{
public class MetaData
{
[Required]
[Display(Name = "Enter Your Name")]
public string FirstName;
}
}
https://ryanhayes.net/data-annotations-for-entity-framework-4-entities-as-an-mvc-model/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。