反正我是否可以在Linq to Entities的 SQL Server中创建一个not in子句?
我有一个奇怪的行为,试图执行一个将ObjectQuery MergeOption声明为"NoTracking"的查询,在这种情况下,实体框架不应附加任何实体,也不应创建相对的ObjectStateEntry来跟踪实体状态.
问题是,不是增加性能而是变得更糟,相同的查询在默认合并(即AppendingOnly)时需要10秒,如果我尝试指定notracking则需要1分钟
有人对此有解释吗?
我想使用表达式树动态生成以下select语句:
var v = from c in Countries
where c.City == "London"
select new {c.Name, c.Population};
Run Code Online (Sandbox Code Playgroud)
我已经研究出如何生成
var v = from c in Countries
where c.City == "London"
select new {c.Name};
Run Code Online (Sandbox Code Playgroud)
但我似乎无法找到一个构造函数/重载,让我在select lambda中指定多个属性.
我正在学习实体框架,我遇到了问题!
有人可以澄清我是否正确地认为我无法从数据库中获取父母及其子集的子集?
例如...
db.Parents
.Include(p => p.Children)
.Where(p => p.Children.Any(c => c.Age >= 5))
Run Code Online (Sandbox Code Playgroud)
这将返回所有有5岁以上孩子的父母,但如果我遍历Parents.Children集合,所有孩子都将在场(不仅仅是5岁以上的孩子).
现在查询确实对我有意义(我已经要求包含子项,我已经得到了它们!),但可以想象我想在某些场景中将where子句应用于子集合.
问题:
我找到了一些关于这个主题的博客和SO帖子,但没有什么能够解释我的小脑袋.
编辑
读过这个博客(感谢Daz Lewis).......我仍然没有得到它!
在博客中给出的示例中,我可以看到如何针对单个Parent实例实现它,但我正在努力弄清楚如何使用集合来实现它.
我怎么能得到一个IEnumerable,其中每个父母都有一个过滤的儿童集合(年龄> = 5)?
进一步澄清:
在回答DonAndre的评论时,我追问的是a)有5岁以上孩子的父母名单(仅包括那些孩子).
任何帮助,赞赏,
谢谢.
现在我进入我的程序并且它实际上没有更新...我不能在列中放置null.如何正确更新edmx?谢谢.
我是新手使用LINQ to Entities(或实体框架,无论他们调用它),我写了很多这样的代码:
var item = (from InventoryItem item in db.Inventory
where item.ID == id
select item).First<InventoryItem>();
Run Code Online (Sandbox Code Playgroud)
然后像这样调用该对象上的方法:
var type = item.ItemTypeReference;
Run Code Online (Sandbox Code Playgroud)
要么
var orders = item.OrderLineItems.Load();
Run Code Online (Sandbox Code Playgroud)
检索子对象或相关对象.
我没有对数据库进行分析或挖得太深,但我的猜测是,当我调用.Load()或*Reference属性时,我实际上正在再次调用数据库.如果是这种情况,有没有办法在我的初始LINQ表达式中获取这些对象?
我想为那些想要从linq2sql迁移到linq2entities和ADO.net Entity Framework(在这里称为L2E)的人们开始参考.我不想讨论哪两个更好.我只是想为那些想要从一个过渡到另一个的人创建这两者之间的差异列表.
基本的东西很简单:删除linq2sql数据类,添加ado.net模型(从数据库创建).将"实体"重命名为以前的datacontext名称.
using (MyDataClassesDataContext mydc = new MyDataClassesDataContext())
{
// change data
mydc.SubmitChanges();
}
Run Code Online (Sandbox Code Playgroud)
在L2E中,这必须改为:
using (MyDataClassesDataContext mydc = new MyDataClassesDataContext())
{
// change data
mydc.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
using (MyDataClassesDataContext mydc = new MyDataClassesDataContext())
{
MyTable myRow = new MyTable();
mydc.MyTable.InsertOnSubmit(myRow);
mydc.SubmitChanges();
}
Run Code Online (Sandbox Code Playgroud)
在L2E中,这必须改为:
using (MyDataClassesDataContext mydc = new MyDataClassesDataContext())
{
MyTable myRow = new MyTable(); // or = MyTable.CreateMyTable(...);
mydc.AddToMyTable(myRow);
mydc.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
mydc.MyTable.Attach(myRow);
Run Code Online (Sandbox Code Playgroud)
在L2E中:
// you …Run Code Online (Sandbox Code Playgroud) 假设我在SQL Server 2008中有以下表定义:
CREATE TABLE Person
(PersonId INT IDENTITY NOT NULL PRIMARY KEY,
Name VARCHAR(50) NOT NULL,
ManyMoreIrrelevantColumns VARCHAR(MAX) NOT NULL)
CREATE TABLE Model
(ModelId INT IDENTITY NOT NULL PRIMARY KEY,
ModelName VARCHAR(50) NOT NULL,
Description VARCHAR(200) NULL)
CREATE TABLE ModelScore
(ModelId INT NOT NULL REFERENCES Model (ModelId),
Score INT NOT NULL,
Definition VARCHAR(100) NULL,
PRIMARY KEY (ModelId, Score))
CREATE TABLE PersonModelScore
(PersonId INT NOT NULL REFERENCES Person (PersonId),
ModelId INT NOT NULL,
Score INT NOT NULL,
PRIMARY KEY (PersonId, …Run Code Online (Sandbox Code Playgroud) 使用Dynamic LINQ库(链接),是否容易受到注入?和(如果是的话)如何防止这种情况?
安全注意事项(实体框架)的一些背景知识:
LINQ to Entities注入攻击:
尽管在LINQ to Entities中可以进行查询组合,但它是通过对象模型API执行的.与实体SQL查询不同,LINQ to Entities查询不是使用字符串操作或连接组成的,并且它们不易受传统SQL注入攻击的影响.
由于动态SQL是使用字符串组成的,这意味着它可能容易受到注入向量的影响吗?或者LINQ to SQL会根据Dynamic LINQ库中的基础数据类型自动处理参数化值吗?
或者它是完全安全的,因为动态查询将在内存中执行而不是在SQL上执行(从而否定SQL索引的任何好处)?
我一直在努力理解DynamicLibrary.cs代码,但我确信我可以很容易地忽略一些东西.
由于这个问题是关于动态LINQ库本身,这个问题可以被认为适用于两者linq-to-sql和linq-to-entities(尽管上面引用了实体框架).
好的,所以我是EF和LINQ的新手.我已经弄清楚如何INSERT和DELETE但由于某种原因UPDATE似乎逃脱了我的掌握.
以下是我的代码示例:
EntityDB dataBase = new EntityDB();
Customer c = new Customer
{
Name = "Test",
Gender = "Male
};
dataBase.Customers.AddObject(c);
dataBase.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
上面创建并添加了一个记录就好了.
Customer c = (from x in dataBase.Customers
where x.Name == "Test"
selext x).First();
dataBase.Customers.DeleteObject(c);
dataBase.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
以上有效删除了指定的记录.
现在我该如何更新?我似乎无法UpdateObject()在实体集合上找到" "方法.
c# linq linq-to-entities entity-framework entity-framework-4