在MSDN文档之后我们可以阅读:
然后缓存该上下文的模型,该模型适用于app域中上下文的所有其他实例.可以通过在给定的ModelBuidler上设置ModelCaching属性来禁用此缓存,但请注意,这会严重降低性能.
问题是模型构建器不包含任何名为ModelCaching的属性.
如何禁用模型缓存(例如,在运行时更改模型配置)?
c# caching ef-code-first entity-framework-6 ef-model-builder
背景
绑定到Entity Framework的新ASP.NET MVC控制器的Visual Studio脚手架在模型使用数据注释或其中的直接线OnModelCreating(DbModelBuilder)描述其特征时运行良好.
问题
但是,在我们的场景中,OnModelCreating使用单个EntityTypeConfiguration<T>类重构内容.尝试通过MVC + EF脚手架创建新的Controller时,会出现以下弹出错误:
运行所选代码生成器时出错:'已添加类型SomeModelClass的配置.要引用现有配置,请使用
Entity<T>()或ComplexType<T>()方法.
有修复(例如自定义代码或项目配置)吗?
c# asp.net-mvc entity-framework visual-studio ef-model-builder
我一直想为我的集合类型创建导航属性,我发现这个例子中的一个人如何完成它使用OnModelCreating.我在我的MVC 5应用程序中试了一下,在尝试更新我的数据库时收到了这个错误:
在模型生成期间检测到一个或多个验证错误:
BlogEngine.Models.IdentityUserLogin :: EntityType'IdentityUserLogin'没有定义键.定义此EntityType的键.BlogEngine.Models.IdentityUserRole :: EntityType'IdentityUserRole'没有定义键.定义此EntityType的键.IdentityUserLogins:EntityType:EntitySet'IdentityUserLogins'基于没有定义键的类型'IdentityUserLogin'.IdentityUserRoles:EntityType:EntitySet'IdentityUserRoles'基于类型'IdentityUserRole',没有定义键.
我做了一些搜索,我找到了解决一个用户问题的解决方案,但他的需求与我的不同.对于我想要做的事情,解决方案似乎很复杂.
这是导致问题的代码:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
//public DbSet<Image> Images { get; set; }
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
public DbSet<Post> Posts { get; set; }
public DbSet<Image> Images { get; set; }
public DbSet<Album> Albums { get; set; }
public DbSet<Tag> Tags { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder) …Run Code Online (Sandbox Code Playgroud) 我有一个使用EF的Code First MVC项目.
有两个表,TableA并且TableB,它们目前具有一对多的关系:
public partial class TableA
{
public TableA()
{
TableBs = new HashSet<TableB>();
}
public int Id { get; set; }
public Virtual ICollection<TableB> TableBs { get; set; }
}
public partial class TableB
{
public int Id { get; set; }
public int TableAId { get; set; }
public virtual TableA TableAs { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
modelBuilder.Entity<TableA>()
.HasMany(e => e.TableBs)
.WithRequired(e => e.TableA)
.HasForeignKey(e => e.TableAId);
Run Code Online (Sandbox Code Playgroud)
我试图改变TableA它给它一对一或零关系:
public partial …Run Code Online (Sandbox Code Playgroud) Entity Framework 7(Entity Framework Core)在PropertyBuilder. 第一个似乎是“通用”集:
然后有一个“ForSqlServer”的匹配集:
似乎还有一种附加的“ForSqlServer”扩展方法,没有“通用”对应项:
两组之间有什么区别?何时使用哪一组?
我正在尝试将 EF Core 1.x 项目升级到 2.0。在 1.x 中,我利用了提供者特定的扩展方法(例如ForSqlServerHasDefaultValueSql/ForSqliteHasDefaultValueSql或ForSqlServerHasColumnType),但这些似乎已在 2.0 中删除。
由于每个提供程序都有自己的 SQL 风格和功能,因此我需要能够在OnModelCreating. 例如设置一个默认值我可能有:
modelBuilder<Foo>(b =>
{
b.Property(x => x.CreateDate)
.IsRequired()
.ForSqlServerHasDefaultValueSql("getutcdate()")
.ForSqliteHasDefaultValueSql("CURRENT_TIMESTAMP");
}
Run Code Online (Sandbox Code Playgroud)
这是如何在 2.0 中完成的?
我通过从表中删除一列到另一列来更新我的数据模型,但我在此列中有数据
为此,我首先在新表中添加新列并完成。
现在我想将列数据从旧表迁移到新表,我正在考虑在Up(MigrationBuilder migrationBuilder)方法中进行但我不知道正确的方法。
所以,我问是否有人知道我可以从哪里开始。
谢谢你们!
c# entity-framework-core ef-model-builder entity-framework-migrations
我正在开发一个首先使用Entity-Framework代码和迁移的应用程序.
我有以下类,表示当一个用户为某个产品备份另一个用户时两个用户之间的关系.User和Product类没有对UserBackup的任何引用.此关系应映射到dbo.UserBackup表.用户可以为多个产品拥有多个备份用户.所以基本上只有ProductId,BackupUserId和UserId的组合在表中是唯一的.
public class UserBackup
{
public int Id { get; set; }
public User User { get; set; }
public User BackupUser { get; set; }
public Product Product { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我在上下文类中重写OnModelCreating方法,如下所示:
private static void CreateUserBackupTable(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<UserBackup>().ToTable("UserBackup");
modelBuilder.Entity<UserBackup>().HasKey(e => e.Id);
modelBuilder.Entity<UserBackup>().HasRequired<User>(e => e.User).WithMany().Map(x => x.MapKey("UserId"));
modelBuilder.Entity<UserBackup>().HasRequired<User>(e => e.BackupUser).WithMany().Map(x => x.MapKey("BackupUserId"));
modelBuilder.Entity<UserBackup>().HasRequired<Product>(e => e.Product).WithMany().Map(x => x.MapKey("ProductId"));
}
Run Code Online (Sandbox Code Playgroud)
应用"添加 - 迁移"命令后生成的迁移文件包含以下代码.
CreateTable(
"dbo.UserBackup",
c => new
{
Id = c.Int(nullable: false, identity: true),
UserId = c.Int(nullable: …Run Code Online (Sandbox Code Playgroud) 我有两个entites的,发展前景及人,我想要做的是使用Prospect.ID作为ProspectTable和是PersonID的外键的主键,我IDEIA是使用两个实体相同的ID而对需要的是PersonID的我展望实体.当潜在客户被保存在数据库中时,它会尝试保存PersonID,即使我没有在我的Prospect实体上拥有此属性,我想知道ef核心是否支持这种关系.
这是我在模型构建器上得到的.
modelBuilder.Entity<ProspectDto>(builder => { builder.ToTable("Prospects"); builder.HasKey(prospect => prospect.ID); });
modelBuilder.Entity<PersonDto>(builder => { builder.HasOne(p => p.Prospect).WithOne().HasForeignKey<ProspectDto>(pe => pe.ID); });
Run Code Online (Sandbox Code Playgroud)
这是在数据库上执行的内容:
INSERT INTO [Prospects] ([ID], [PersonID]) VALUES (@p421, @p422),
PersonDTO:
public class PersonDto : DtoBase
{
public PersonDto()
{
}
public ProspectDto Prospect { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
ProspectDTO:
public class ProspectDto : DtoBase
{
public ProspectDto()
{
}
public PersonDto Person { get; set; } = new PersonDto();
}
Run Code Online (Sandbox Code Playgroud)
DtoBase:
public abstract class DtoBase
{
public Guid ID { …Run Code Online (Sandbox Code Playgroud)