Tag: entity framework

过滤IQueryable子列表

使用entity framework,但这可能无关紧要如果我有一个Iqueryable,我如何过滤子列表并保持IQueryable,以便它还没有达到数据库? 如果我有10个项目并且每个项目有3个子项目,我该如何过滤它以便返回所有10个项目并且它们的子项目被过滤到id = 1的位置? class Item上有大约20个属性,所以我不想在每个属性上使用投影,因为维护问题。 items = items.select(??);//how to do this so items are returned, and their children are filtered? class SubItem { private int ID { get; set; } } class Item { private List SubItems { get; set; } }

使用entity framework中的属性映射多对多关系

我总是使用Attributes将我的实体的属性映射到它们对应的列。 这是一个例子: [Table(“news_entries”)] public class News { [Key] public int Id { get; set; } [Column(“d_date”)] public DateTime Date { get; set; } [Column(“m_text”)] public string Text { get; set; } [Column(“id_user”)] public int UserId { get; set; } [ForeignKey(“UserId”)] public User User { get; set; } } 但我仍然不知道,我如何映射多对多关系,其中表和列名称与属性不匹配。 我知道我可以在我的DbModelBuilder中使用DbContext ,但我不想在我的实体类之外进行映射。 是否有可能将这些关系映射到属性?

entity frameworkISNULL在Where条件下

我在SQL Server中有一个查询: SELECT * FROM MyTable t WHERE ISNULL(t.Status,”) = ” 我如何在entity framework中做到这一点? 编辑:哦对不起,我的代码就像 WHERE ISNULL(t.Status,”) = ”

如何使用通用存储库模式按类型有条件地过滤IQueryable

我的通用存储库中有一个返回IQueryable : public virtual IQueryable All { get { DbSet set = Context.Set(); if (typeof(T).IsSubclassOf(typeof(OrganisationDependent))) return set.AsEnumerable() .Cast() .Where(x => x.OrganisationID == CurrentOrganisationID) .AsQueryable() .Cast(); return set; } } if语句的原因是大多数但不是所有表都有OrganisationID ,我想确保用户只看到他们所属组织的数据。 上面的代码工作,但为了使它工作,我不得不添加AsEnumerable()将数据拉入内存。 没有它,我收到错误消息 “无法将类型’Models.xxx’强制转换为’Models.OrganisationDependent’.LINQ to Entities仅支持转换EDM原语或枚举类型” 我的所有实体都直接inheritanceModelBase或OrganisationDependent : public abstract class OrganisationDependent : ModelBase { public int OrganisationID { get; set; } public virtual Organisation […]

搜索function使用.Contains与一个字段中的术语

我为产品网站构建了搜索function。 搜索工作正常。 最近,我们在数据库中添加了一个SearchTerm字段。 SearchTerm数据示例:“工作鞋蓝黑色齿轮”当前代码是 pM = (from p in ctx.Products where p.productSearchField.Contains(term) || p.productName.Contains(term) select p).ToList() 如果术语=“鞋子”< – 有效 如果术语=“工作鞋”< – 有效 如果术语=“黑鞋”< – 不起作用。 我还尝试用逗号分隔SearchTerm数据,但这不起作用。 任何建议?

EF4.1(代码优先) – 如何指定复合关系

在Linq to SQL中,我可以指定一个不必依赖于数据库中存在的外键和pks的关系,这对于创建这样的复合关系非常有用: public class Equipment_CableNormalised { … [Association(ThisKey = “EquipmentId,PortNumber”, OtherKey = “EquipmentId,PortNumber”, IsForeignKey = false)] public List EquipmentPorts { get; set; } } 然后生成类似于” .. join EquipmentPorts EP on EP.EquipmentId = blah and EP.PortNumber = Blah”的sql。 我可以在EF4.1中使用相同的东西(使用注释或流畅的api)吗? 我知道你可以指定复合键并使用[Keys]和[ForeignKeys]属性,但这种关系不会映射到键…

将列添加到DB表后,entity framework出现问题

我需要在我的数据库中的表中添加一个新的NVARCHAR列。 所以我添加了该列,然后启动了Visual Studio以更新Entity Framework的EDMX文件。 我在数据库中运行了所有内容的更新模型,这只导致“数据读取器不兼容” – 错误。 所以我在DB中重命名了整个表,从数据库更新了EDMX,将表重命名为原始名称,再次运行update,然后为所有受影响的存储过程创建了新的函数导入。 但我仍然得到同样的错误: 数据读取器与指定的'[Model]。[Entity]’不兼容。 类型为“[Column]”的成员在数据读取器中没有相应的具有相同名称的列。 我看了一下,如果数据库和框架中的列名不同,这似乎是一个常见的错误。 然而情况并非如此,它们具有相同的名称。 我可以通过[Entity] .Context。[Column]访问代码中的列,所以我不太清楚数据阅读器在抱怨什么。 我已经没有想法了,所以欢迎任何帮助。

LINQ表达式将匹配多个批量输入

如何编写匹配多个批量输入的LINQ表达式? 这是我的数据库表 Members Division, Department 1 3 4 9 * 5 1 6 3 * 9 2 我想选择标有*的成员 这是我的意见 int[] divisions = new int[2] {4, 6}; int[] department = new int[2] {9, 3}; 这是我试过的查询 var selectedMembers = members.Where(member => divisions.Contains(member.Division) && department.Contains(member.Department)).ToArray(); 这在EF中表现不正常。 当使用单个输入而不是两个输入时(分区和部门)它应该在输入中返回匹配的对,例如: Member[] selectedMembers = new Member[2] { new Member{Division=4,Department=9}, new Member{Division=6,Department=3}};

entity framework的集合值参数?

在我的上一个项目中,我决定使用entity framework,直到我尝试使用“where in”获取数据时一切顺利,我收到了错误。 经过一番小小的搜索,我发现了这篇文章和post 。 这就是我想要做的 var all = fooelements .Where(l=>controlsToGet .Contains(l.Control.Name)); 是否有任何处理它与lambda表达式或linq与entity framework? 谢谢

连接字符串中的撇号(单引号)

我在连接字符串中的’字符有问题。 entity framework抛出exception说: 初始化字符串的格式不符合从索引开始的规范 我尝试了这里和这里建议的答案无济于事。 我也尝试用SqlConnectionStringBuilder类构造它,并得到相同的exception结果。 谁能帮我吗? 提前致谢。 编辑: connectionstring确实在web.config文件中,它看起来像这样: 问题在于Password=test’password位。 我不能把它放在双引号中,因为它已经被它们包围了。 我不能把它放在" -s因为它已经被它们包围了。 我不能把它放在单引号中,因为单引号本身就是我想逃避的。 Password=’test'password’不起作用。