我有两个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)
这可能不是正确的方法,所以这就是我想要做的:
编辑:
这是我目前使用的代码(非常快),但它意味着重复的代码:
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) 另一个'实体类型'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].如果你不能那么公平,我会解决它,但如果有人能够确认这种或那种方式,我将不胜感激.
我想在我的一个数据类中使用以下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
如何以编程方式从EF CodeFirst dbcontext获取dbset类的元数据?这是为了代码生成目的而循环.
这是我的第一个EF项目,请耐心等待.
更新像Department这样的实体时,将其从上下文中拉出,更新其值并调用context.SaveChanges.但是,如果您更新Department.Employees,EF并不觉得有趣.
我搜索并想出了在连接字符串中设置Multipleactiveresultsets = true的选项,但想知道是否:
.net sql-server entity-framework connection-string ef-code-first
我尝试使用代码首次迁移时收到此错误.
我的上下文有一个带有连接名称的构造函数.
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
我有一堆Code First创建的表.
然后在SQL中我删除了一个表,以便我不可避免地在堆栈上问这个问题.
update-database在包管理控制台中使用后,我得到:
找不到对象"dbo.ContractParents",因为它不存在或者您没有权限.
重建我的桌子的最佳方法是什么?
我已经读过了 context.Database.CreateIfNotExists();
我把它放在我的种子功能中,但没有做任何事情.
谢谢!
我正在使用EF,我已经获得了Entity Framework Power Tools扩展,它允许我根据给定数据库中的表对类进行逆向工程.
我们有一个相当广泛的数据库,有很多表我不需要代表.有没有简单的方法来选择这些的子集,只对那些进行反向工程?
entity-framework reverse-engineering ef-code-first visual-studio-2012
我在用 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开发一个ASP.NET MVC项目,其代码首先来自数据库.我得到了数据库中每个表的模型.我在模型中进行了一些更改,启用了迁移,当我初始化迁移时出现错误:
数据库中已经存在一个名为"TableName"的对象."
我试过update-database -force但没有帮助.初始迁移会创建已存在的表!
如何进行初始迁移应用模型上的更改而不是从头开始创建表?
在这种情况下,在数据库和模型之间同步更改的最佳做法是什么?
ef-code-first ×10
asp.net-mvc ×3
c# ×3
.net ×1
c#-4.0 ×1
code-first ×1
join ×1
linq ×1
ninject ×1
sql-server ×1