标签: code-first

EF 4.1:为什么将常量转换为变量会导致额外的子查询?

今天我发现实体框架正在向它生成的 SQL 添加一个不必要的子查询。我开始挖掘我的代码,试图缩小它的来源。A(很长)一段时间后,我指出了导致它的原因。但是现在我比开始时更困惑,因为我不知道为什么会这样。

基本上我发现的是,在某些情况下,简单地将常量转换为变量可以改变实体框架生成的 SQL。我已将所有内容缩小到最低限度,并将其打包在一个小型控制台应用程序中:

using System;
using System.Data.Entity;
using System.Linq;

class Program
{
    private static readonly BlogContext _db = new BlogContext();

    static void Main(string[] args)
    {
        const string email = "foo@bar.com";

        var comments = from c in _db.Comments
                       where c.Email == email
                       select c;

        var result = (from p in _db.Posts
                      join c in comments on p.PostId equals c.PostId
                      orderby p.Title
                      select new { p.Title, c.Content });

        Console.WriteLine(result);
    }
}

public class BlogContext : DbContext
{
    public DbSet<Post> Posts …
Run Code Online (Sandbox Code Playgroud)

c# linq-to-entities entity-framework code-first entity-framework-4

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

如何使用 Entity Framework Code First 确定多对多联结表名称?

我知道 Code-First 使用模型绑定约定,并且这是默认可用(并且处于活动状态?)的约定列表。

看来多对多关系的联结表名称的选择有点随机

使用哪个引用约定来确定连接表名称?用于确定该名称的算法是什么?

.net code-first entity-framework-4.1

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

实体框架并发令牌数据时间类型的问题

我有 DateTime 的并发令牌问题。这是重现问题的简单方法。拥有一个实体:

public class Employee
{
    public int EmployeeID { get; set; }
    public string Name { get; set; }
    [ConcurrencyCheck]
    public DateTime LastModified { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

一个简单的 DbContext:

public class MyContext : DbContext
{
    public DbSet<Employee> Employees { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

以及以下代码:

Employee orig;

//  Create a row (insert)
using (var context = new MyContext())
{
    orig = new Employee
    {
        Name = "Mike",
        LastModified = DateTime.Now
    };
    context.Employees.Add(orig);

    context.SaveChanges();
}
//  Update the row, …
Run Code Online (Sandbox Code Playgroud)

entity-framework code-first ef-code-first

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

实体框架 5 - 代码第一个数组导航属性与接口类型一对多

这些是我的课程:

public class Post : IPost
{
    public int Id { get; set; }
    public virtual int[] DuplicateOf { get; set; }
    public virtual ICommentInfo[] Comments { get; set; }
}

 public class CommentInfo : ICommentInfo
{
    public virtual string Author { get; set; }
    public virtual int Id { get; set; }
    public virtual string Text { get; set; }

    public virtual int PostId{ get; set; }
    [ForeignKey("PostId")]
    public virtual Post Post { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

将此 CommentConfiguration …

foreign-key-relationship code-first navigation-properties ef-code-first entity-framework-5

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

如何防止实体框架代码首先使用不属于模型的派生类

这是我正在做的事情、正在发生的事情以及应该发生的事情的通用示例:

首先,我声明我的代码优先模型,如下所示:

语境:

namespace Models {
    public class MyContext : DbContext
    {
        public DbSet<ClassA> ClassA { get; set; }
        public DbSet<ClassB> ClassB { get; set; }

        public MyContext()
            : base("name=MyContext")
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

A 类和 B 类:

namespace Models {
    public class ClassA
    {
        public int ClassAID { get; set; }
        public string BaseAVal { get; set; }
        public virtual ICollection<ClassB> ClassBChildren {get; set; }//Relation Property
    }
    public class ClassB
    {
        public int ClassBID { get; set; }
        public …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework code-first ef-code-first

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

如何从 EF 中的 Seed() 访问 sql 文件?

我有以下几点:

  string sproc = AppDomain.CurrentDomain.BaseDirectory + "/Stored Procedures/new_message.sql";
  context.Database.ExecuteSqlCommand(sproc);
Run Code Online (Sandbox Code Playgroud)

但是,sproc由于某种原因,该路径无效。从SeedEF 代码优先迁移方法访问项目目录中的文件的正确方法是什么?

在此处输入图片说明

.net c# entity-framework code-first

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

我如何使用休眠生成迁移?

我想通过 hibernate 和 java 的代码优先方法生成我的数据库。我成功生成了数据库,但我错过了我的迁移文件。hibernate 支持迁移,例如 .NEt 中的 EntityFrameworkCore、PHP 中的 Eloquent 或节点中的 Sequelize?

这是我生成数据库的类:

public class CreateDataBase {
    public static void main(String[] args) {
      Configuration conf = new Configuration();
      conf.configure();

      SchemaExport se = new SchemaExport(conf);
      se.create(true,  true);  
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的架构:

package Infra.HibernateConfiguration;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity 
public class Bank {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id; 

    @Column()
    private String code;

    @Column()
    private String name;

    public int getId() {
        return id;
    }

    public …
Run Code Online (Sandbox Code Playgroud)

java migration hibernate code-first

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

“术语‘添加迁移’未被识别为 cmdlet 的名称”visual studio 2019

在此处输入图片说明
在此处输入图片说明

我正在尝试使用实体框架工作核心并打开一个新的 asp.net 核心项目。当我尝试通过 nuget 包管理器安装 Microsoft.EntityFrameworkCore.SqlServer 时,出现以下错误。

包 Microsoft.EntityFrameworkCore.SqlServer 3.0.0 与 net461 (.NETFramework,Version=v4.6.1) 不兼容。包 Microsoft.EntityFrameworkCore.SqlServer 3.0.0 支持:netstandard2.1 (.NETStandard,Version=v2.1)

当我点击它时,我被发送到 .csproj 文件。

在该文件中,我将目标框架从 <TargetFramework>net461</TargetFramework>更改 <TargetFramework>netstandard2.1 </TargetFramework>为错误所暗示的。

这样做可以消除错误,但是当我在包管理器控制台中使用命令“add-migration”时,出现此错误。

“术语 'add-migration' 不被识别为 cmdlet 的名称”

我不确定接下来要做什么。请帮忙。我希望我已经清楚地解释了这个问题。

删除 project.assets 文件或更新 nuget 包管理器并使用命令“enable-migrations”也没有奏效。

在此处输入图片说明
在此处输入图片说明

c# code-first entity-framework-core asp.net-core

4
推荐指数
3
解决办法
7177
查看次数

如何在Entity框架代码第一个数据库中删除相关对象?

DBContext类是

public class VGDB : DbContext
    {        
        public DbSet<Planet> Planets { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

模型看起来像:

public class Planet
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }

        ...

        public List<Building> Constructions { get; set; } 
    }


public class Building
    {
        [Key]
        public int Id { get; set; }
        public decimal Lvl { get; set; }
        public string Type { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

存储库类:

public class VGDBRepository
    {
        private readonly VGDB _vgdb; …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework code-first

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

具有集合的对象的实体框架更新方法

我在更新DB中的现有实体时遇到问题.我正在使用Entity Framework Code First.

我有计算食物的小程序.

我的域类>

public class Unit
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

public abstract class Item
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

public class Ingredient : Item
    {        
        public virtual Unit Unit { get; set; }               
        public decimal Price { get; set; }        
    }

public class Recipe : Item 
    {
        public virtual List<RecipeItem> Items { get; set; …
Run Code Online (Sandbox Code Playgroud)

.net c# entity-framework code-first ef-code-first

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