标签: ef-code-first

我如何只使用LINQ Join()链接两个IQueryables?

我有两个IQueryables:

成分:

IngId
Description
Run Code Online (Sandbox Code Playgroud)

AvailableIngredient:

IngId
Run Code Online (Sandbox Code Playgroud)

我已经有了一个IQueryable成分:

var ingQuery = from i in context.Ingredients
               select i;
Run Code Online (Sandbox Code Playgroud)

如何向他添加AvailableIngredient联接以便过滤(即内部联接)?如果我必须一直加入,我知道如何做到这一点,即从...加入context.Available ...等),但是Join是有条件的,所以我需要使用其他语法:

if (filterByAvailable)
{
   IQueryable<Available> availableQuery = GetAvailableIngredientQuery(context);
   ingQuery = ingQuery.Join(...); // Can I use this to join to the query?
}
Run Code Online (Sandbox Code Playgroud)

这可能不是正确的方法,所以这就是我想要做的:

  • GetAvailableIngredientQuery返回可用的成分查询,即3000中的3000(但它没有枚举结果,因为它从EF返回为IQueryable)
  • 将availableQuery加入到ingQuery中,因此两个查询之间存在内部联接

编辑:

这是我目前使用的代码(非常快),但它意味着重复的代码:

IQueryable<Ingredient> query;
if (filterByAvailable)
{
    IQueryable<Available> availableQuery = GetAvailableIngredientQuery(context);
    query = from item in context.Ingredients
               // Quite a few `where` clauses and stuff
            join t in availableQuery on item.IngId equals t.IngId
            select item;
} …
Run Code Online (Sandbox Code Playgroud)

linq join entity-framework-4 ef-code-first c#-4.0

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

实体类型没有定义键

另一个'实体类型'x'没有键定义'问题,但我已经在[Key]属性上设置了属性,所以我有点困惑.

这是我的实体和上下文类:

namespace DoctorDB.Models
{
    public class Doctor
    {
        [Key]
        public string GMCNumber;
        [Required]
        public string givenName;
        [Required]
        public string familyName;
        public string MDUNumber;
        public DateTime MDUExpiry;
        public string MDUCover;
    }

    public class DoctorContext : DbContext
    {
        public DbSet<Doctor> Doctors { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我去创建我的控制器时,我选择使用实体框架方法使用此实体和上下文创建它:

在此输入图像描述

我收到此错误:

在此输入图像描述

我唯一想到的是你是否无法在字符串属性上成功使用[Key].如果你不能那么公平,我会解决它,但如果有人能够确认这种或那种方式,我将不胜感激.

ef-code-first entity-framework-4.1

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

EF Code First不为ICollection <string>生成表

我想在我的一个数据类中使用以下ICollection属性(让我们称之为"Foo")

public class Foo
{
    [Key]
    public int FooId { get; set; }
    public string SomeValueOrOther { get; set; }
    public virtual ICollection<string> AllowedBars { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我可以在使用实体上下文时添加字符串值,但它们不会"去任何地方".换句话说,没有生成表来表示此关系,因此不会保存任何值.我期望的是一个包含两列的表,一个用于"FooId",一个用于"AllowedBar",EF用于将其自动映射到集合(与复杂类型一样).

由于没有发生这种情况,我必须使用上面描述的两个属性创建一个名为"FooAllowedBar"的类.

这让我很不高兴,因为它是我在整个项目中唯一的"连接"类型.当然,它可以工作,所以一个方框被勾选,但有没有人知道如何让EF为字符串集合关系生成一个表?(或int,或datetime等)

很可能,从EF上的小信息(仍然!),这种功能尚未得到支持.我想接近一个确定的答案.

非常感谢,Rob

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

14
推荐指数
1
解决办法
5547
查看次数

如何从EF CodeFirst DbContext获取dbsets元数据?

如何以编程方式从EF CodeFirst dbcontext获取dbset类的元数据?这是为了代码生成目的而循环.

ef-code-first

14
推荐指数
1
解决办法
5680
查看次数

Entity Framework 4.1 Code First中的Multipleactiveresultsets

这是我的第一个EF项目,请耐心等待.

更新像Department这样的实体时,将其从上下文中拉出,更新其值并调用context.SaveChanges.但是,如果您更新Department.Employees,EF并不觉得有趣.

我搜索并想出了在连接字符串中设置Multipleactiveresultsets = true的选项,但想知道是否:

  • 这是推荐的方式吗?
  • 这会对性能造成不利影响/我应该注意什么?

.net sql-server entity-framework connection-string ef-code-first

14
推荐指数
1
解决办法
7915
查看次数

获得'语境不是可构建的.添加默认构造函数或提供IDbContextFactory的实现."

我尝试使用代码首次迁移时收到此错误.

我的上下文有一个带有连接名称的构造函数.

public class VeraContext : DbContext, IDbContext
{
    public VeraContext(string NameOrConnectionStringName = "VeraDB")
        : base(NameOrConnectionStringName)
    {
    }

    public IDbSet<User> Users { get; set; }
    public IDbSet<Product> Products { get; set; }
    public IDbSet<IntCat> IntCats { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当项目运行时,此连接名称将使用ninject注入,我也将其指定为默认值,如上面的代码中所示但这没有帮助.

kernel.Bind<IDbContext>()
    .To<VeraContext>()
    .WithConstructorArgument("NameOrConnectionStringName", "VeraDB");
Run Code Online (Sandbox Code Playgroud)

当我尝试使用"启用 - 迁移"添加迁移时会引发错误:

目标上下文'VeraData.EF.Infrastructure.VeraContext'不可构造.添加默认构造函数或提供IDbContextFactory的实现.

如果我从中删除构造函数VeraContext将工作,但创建另一个数据库VeraData.EF.Infrastructure.VeraContext作为其名称.

我假设ninject只在项目运行时传递连接字符串,而不是在我使用代码优先迁移时.无论如何,我可以在使用代码首次迁移时注入/提供连接名称的默认值?

ninject ef-code-first asp.net-mvc-4 ef-migrations entity-framework-5

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

如何强制EF代码首先重新创建数据库?

我有一堆Code First创建的表.

然后在SQL中我删除了一个表,以便我不可避免地在堆栈上问这个问题.

update-database在包管理控制台中使用后,我得到:

找不到对象"dbo.ContractParents",因为它不存在或者您没有权限.

重建我的桌子的最佳方法是什么?

我已经读过了 context.Database.CreateIfNotExists();

我把它放在我的种子功能中,但没有做任何事情.

谢谢!

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

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

逆向工程实体框架的表子集

我正在使用EF,我已经获得了Entity Framework Power Tools扩展,它允许我根据给定数据库中的表对类进行逆向工程.

我们有一个相当广泛的数据库,有很多表我不需要代表.有没有简单的方法来选择这些的子集,只对那些进行反向工程?

entity-framework reverse-engineering ef-code-first visual-studio-2012

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

如何使用EF 6.1.1从表中删除单个记录

我在用 Entity Framework 6.1.1.

deleting single record from table如下,但我不确定它是唯一的方式还是可以以有效的方式进一步重写它​​.

有人可以分享评论吗?

原因:我在问,因为早期帖子中的许多解决方案都是指EF 4.0而不使用最新版本6.1.1.

Guid studentId = student.Id;
StudentReportDetail stuDetails = _context.StudentReportDetail.Find(studentId);
if (stuDetails != null)
{
    _context.StudentReportDetail.Remove(stuDetails);
    _context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

entity-framework code-first ef-code-first

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

EF Migration对象已存在错误

我正在使用Entity Framework开发一个ASP.NET MVC项目,其代码首先来自数据库.我得到了数据库中每个表的模型.我在模型中进行了一些更改,启用了迁移,当我初始化迁移时出现错误:

数据库中已经存在一个名为"TableName"的对象."

我试过update-database -force但没有帮助.初始迁移会创建已存在的表!

如何进行初始迁移应用模型上的更改而不是从头开始创建表?

在这种情况下,在数据库和模型之间同步更改的最佳做法是什么?

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

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