我知道LINQ to Entities和LINQ to Objects的一些区别,第一个实现IQueryable和第二个实现IEnumerable,我的问题范围在EF 5中.
我的问题是这3种方法的技术差异是什么?我看到,在许多情况下,所有这些都有效.我也看到使用它们的组合.ToList().AsQueryable().
这些方法究竟意味着什么?
是否有任何性能问题或某些因素会导致使用另一个?
例如,为什么会使用?.ToList().AsQueryable()而不是.AsQueryable()?
linq-to-entities entity-framework entity-framework-4 entity-framework-5
基本上我在我的EF数据库中有一个表,它具有以下属性:
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Image { get; set; }
public string WatchUrl { get; set; }
public int Year { get; set; }
public string Source { get; set; }
public int Duration { get; set; }
public int Rating { get; set; }
public virtual ICollection<Category> Categories { get; set; }
Run Code Online (Sandbox Code Playgroud)
它工作正常但是当我将Rating的int更改为double时,我在更新数据库时遇到以下错误:
对象'DF_ Movies _Rating__48CFD27E'取决于列'评级'.ALTER TABLE ALTER COLUMN评级失败,因为一个或多个对象访问此列.
有什么问题?
我最近一直在使用Entity Framework 4,并且稍微混淆了何时使用ObjectSet.Attach和ObjectSet.AddObject.
根据我的理解:
所以,如果我正在创建一个新人,我会这样做.
var ctx = new MyEntities();
var newPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.AddObject(newPerson);
ctx.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
如果我正在修改现有的人,我这样做:
var ctx = new MyEntities();
var existingPerson = ctx.Persons.SingleOrDefault(p => p.Name = "Joe Bloggs" };
existingPerson.Name = "Joe Briggs";
ctx.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
请记住,这是一个非常简单的例子.实际上我使用的是Pure POCO(无代码生成),Repository模式(不处理ctx.Persons)和Unit of Work(不处理ctx.SaveChanges).但是"在幕后",以上是我的实施中发生的事情.
现在,我的问题 - 我还没有找到一个我不得不使用Attach的场景.
我在这里失踪了什么?我们什么时候需要使用Attach?
编辑
只是为了澄清,我正在寻找何时使用Attach over AddObject(或反之亦然)的示例.
编辑2
下面的答案是正确的(我接受了),但我认为我会添加另一个例子,其中Attach将是有用的.
在我上面修改现有Person的示例中,实际上正在执行两个查询.
一个用于检索Person(.SingleOrDefault),另一个用于执行UPDATE(.SaveChanges).
如果(出于某种原因),我已经知道系统中存在"Joe Bloggs",为什么还需要额外的查询才能获得他的第一个?我能做到这一点: …
我为此感到茫然:
我已经为实体框架(4.1.3)代码第一种方法定义了我的类.一切都很好(我正在制作桌子等),直到我开始播种.
现在当我这样做的时候
Add-Migration "remigrate" ; Update-Database;
Run Code Online (Sandbox Code Playgroud)
我在程序包控制台上收到错误"一个或多个实体的验证失败.有关详细信息,请参阅'EntityValidationErrors'属性."
我的Seed()方法中有一个断点但是因为我在项目没有运行时在控制台上运行它,我对如何获取细节毫无头绪(PS - 我看过线程验证失败对于一个或多个实体,同时使用Entity Framework保存对SQL Server数据库的更改,该实体框架显示了我如何查看属性.)
我知道我的Seed()方法有问题,因为如果我在方法调用之后立即返回,则错误消失.那么如何设置断点以便我可以看到验证错误是什么?有点失落.或者是否有其他方法可以在nuget控制台中跟踪它?
在Entity Framework中使用此代码我收到以下错误.我需要获取特定日期的所有行,采用DateTimeStart此格式的DataType类型2013-01-30 12:00:00.000
码:
var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference)
.Where(x => x.DateTimeStart.Date == currentDateTime.Date);
Run Code Online (Sandbox Code Playgroud)
错误:
base {System.SystemException} = {"The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported."}
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决它?
我正在使用Entity Framework 5 code first和ASP.NET MVC 3.
我正在努力让一个子对象的子对象填充.以下是我的课程..
申请类;
public class Application
{
// Partial list of properties
public virtual ICollection<Child> Children { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
儿童班:
public class Child
{
// Partial list of properties
public int ChildRelationshipTypeId { get; set; }
public virtual ChildRelationshipType ChildRelationshipType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
ChildRelationshipType类:
public class ChildRelationshipType
{
public int Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
存储库中GetAll方法的一部分,用于返回所有应用程序:
return DatabaseContext.Applications …Run Code Online (Sandbox Code Playgroud) entity-framework entity-framework-4 entity-framework-4.1 entity-framework-5
我最近不得不编辑我的app.config文件来更改Entity Framework数据模型(.edmx文件)的连接字符串.但我想知道:有没有办法使用设计器编辑EF连接字符串?
原始连接字符串由"实体数据模型"向导自动生成.然后无法更改连接字符串 - 它在.edmx设计器的属性窗口中保持禁用状态.如果我可以(在app.config中),我喜欢避免手动编辑XML,所以我想知道是否有办法重新进入原始向导屏幕以更改连接字符串并让工具编辑app.config文件为了我.
entity-framework connection-string app-config entity-framework-4
我想加入三张桌子,但我无法理解这个方法......
我完成了加入2个表
var entryPoint = dbContext.tbl_EntryPoint
.Join(dbContext.tbl_Entry,
c => c.EID,
cm => cm.EID,
(c, cm) => new
{
UID = cm.OwnerUID,
TID = cm.TID,
EID = c.EID,
}).
Where(a => a.UID == user.UID).Take(10);
Run Code Online (Sandbox Code Playgroud)

我想在TID PK中包含tbl_Title表并获取Title字段.
非常感谢
c# entity-framework entity-framework-4 entity-framework-4.1 entity-framework-5
我收到此错误"无法删除该对象,因为它在ObjectStateManager中找不到."
我的代码是:
protected MyEntities sqlEntities;
public virtual void Delete(TEntity entity)
{
System.Type t = typeof(TEntity);
sqlEntities.DeleteObject(entity);
sqlEntities.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud) 我从我的数据库生成了一个实体框架模型(4.0).我没有设计数据库,也没有对模式的任何控制,但是有一些表没有定义外键约束,但是定义了隐式关系.
例如:
我有一个名为People的表,其中包含以下列:GenderID RaceID
有Gender和Race的表,但People表中没有外键.
当我导入模型时,它没有为这些关系添加导航属性.我尝试手动添加它,但禁用了"从角色到角色".我不确定如何自己添加关系.我该怎么做呢?
c# entity-framework navigation-properties entity-framework-4
c# ×4
.net ×1
app-config ×1
asp.net ×1
crud ×1
database ×1
linq ×1
nuget ×1
sql ×1
sql-server ×1