gpt4 book ai didi

c# - 我可以先对数据库使用覆盖 OnModelCreating 方法吗

转载 作者:太空宇宙 更新时间:2023-11-03 12:03:46 24 4
gpt4 key购买 nike

我正在尝试将 asp.net 身份集成到我现有的项目中我首先使用数据库,我没有使用 edmx 生成模型和上下文类,我正在自己创建模型,

现在我的问题是:我可以在 DbContext 类中使用“override OnModelCreating”方法吗,或者它是否仅可用于代码优先方法

最佳答案

是的,你绝对可以。毕竟,DbContext 只是数据的面向对象模型。如果生成器为您搭建了脚手架,或者您手动手工制作了它,则无关紧要。我自己也在走那条路。该数据库已经存在并通过 .sqlproj 项目进行维护,虽然它首先作为代码开始,但我在中途进行了切换。

举个实际例子。我正在使用 OnModelCreating 来配置我的实体:

    protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);

//extracted m:n mapping for demonstration puporses
builder.Entity<AppUserRole>(userRole =>
{
userRole.HasKey(ur => new { ur.UserId, ur.RoleId });
userRole.HasOne(ur => ur.Role)
.WithMany(r => r.UserRoles)
.HasForeignKey(ur => ur.RoleId)
.IsRequired();

userRole.HasOne(ur => ur.User)
.WithMany(r => r.UserRoles)
.HasForeignKey(ur => ur.UserId)
.IsRequired();
});

builder.ApplyConfiguration(new AppUserConfiguration());
builder.ApplyConfiguration(new MapConfigConfiguration());
builder.ApplyConfiguration(new MapWidgetConfiguration());
builder.ApplyConfiguration(new WidgetConfiguration());
builder.ApplyConfiguration(new LayoutMenuConfiguration());
builder.ApplyConfiguration(new ImageConfiguration());
builder.ApplyConfiguration(new FrontPageContentConfiguration());
}
}

首先,您可以使用 Nuget 控制台构建现有数据库:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Foo;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

然后根据需要对其进行调整。因此,如果您将 json 存储在 nvarchar 字段中,请添加一个转换以自动将其映射到具体类型:

public class LayerConfigurationConfiguration : IEntityTypeConfiguration<LayerConfiguration>
{
public void Configure(EntityTypeBuilder<LayerConfiguration> builder)
{
builder.HasKey(lc => lc.Id);
/* ... */
builder.Property(lc => lc.LayerConfig).HasConversion(
v => JsonConvert.SerializeObject(v, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }),
v => JsonConvert.DeserializeObject<LayerConfig>(v)
);
}
}

引用:https://learn.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db

关于c# - 我可以先对数据库使用覆盖 OnModelCreating 方法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56013940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com