标签: ef-model-builder

如何在Entity Framework 6中禁用模型缓存(Code First方法)

MSDN文档之后我们可以阅读:

然后缓存该上下文的模型,该模型适用于app域中上下文的所有其他实例.可以通过在给定的ModelBuidler上设置ModelCaching属性来禁用此缓存,但请注意,这会严重降低性能.

问题是模型构建器不包含任何名为ModelCaching的属性.

如何禁用模型缓存(例如,在运行时更改模型配置)?

c# caching ef-code-first entity-framework-6 ef-model-builder

14
推荐指数
2
解决办法
4443
查看次数

在实现EntityTypeConfiguration类之后可以使用ASP.NET MVC + EF脚手架吗?

背景

绑定到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

13
推荐指数
1
解决办法
538
查看次数

解决与ApplicationDbContext一起使用OnModelCreating时出现"No key Defined"错误?

我一直想为我的集合类型创建导航属性,我发现这个例子中的一个人如何完成它使用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)

c# entity-framework-6 asp.net-mvc-5 ef-model-builder

6
推荐指数
2
解决办法
9189
查看次数

EF迁移正在删除列并尝试将不存在的列重命名为Id

我有一个使用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)

sql entity-framework code-first ef-model-builder

5
推荐指数
1
解决办法
2660
查看次数

EF7 属性生成器中的“Has...”和“ForSqlServerHas...”扩展方法有什么区别?

Entity Framework 7(Entity Framework Core)在PropertyBuilder. 第一个似乎是“通用”集:

  • 具有默认值Sql
  • 具有列名
  • 具有列类型
  • 已计算列Sql
  • 有默认值

然后有一个“ForSqlServer”的匹配集:

  • ForSqlServerHasDefaultValueSql
  • ForSqlServerHasColumnName
  • ForSqlServerHasColumnType
  • ForSqlServerHasCompulatedColumnSql
  • ForSqlServerHasDefaultValue

似乎还有一种附加的“ForSqlServer”扩展方法,没有“通用”对应项:

  • ForSqlServerUseSequenceHiLo

两组之间有什么区别?何时使用哪一组?

entity-framework-core ef-model-builder

4
推荐指数
1
解决办法
3950
查看次数

EF Core 2.0 提供程序特定的模型配置

我正在尝试将 EF Core 1.x 项目升级到 2.0。在 1.x 中,我利用了提供者特定的扩展方法(例如ForSqlServerHasDefaultValueSql/ForSqliteHasDefaultValueSqlForSqlServerHasColumnType),但这些似乎已在 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 中完成的?

entity-framework-core ef-model-builder

4
推荐指数
1
解决办法
923
查看次数

EF Core 在迁移 (UP) 时将列数据从表移动到另一个表

我通过从表中删除一列到另一列来更新我的数据模型,但我在此列中有数据

为此,我首先在新表中添加新列并完成。

现在我想列数据从旧表迁移到新表,我正在考虑在Up(MigrationBuilder migrationBuilder)方法中进行但我不知道正确的方法。

所以,我问是否有人知道我可以从哪里开始。

谢谢你们!

c# entity-framework-core ef-model-builder entity-framework-migrations

4
推荐指数
2
解决办法
3275
查看次数

实体框架多个级联删除

我正在开发一个首先使用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)

c# sql entity-framework ef-model-builder

3
推荐指数
1
解决办法
672
查看次数

EF Core:同时使用ID作为主键和外键

我有两个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)

c# entity-framework-core ef-model-builder

2
推荐指数
2
解决办法
8084
查看次数