我正在使用.net 3.5的Entity Framework 1.
我做的事情很简单:
var RoomDetails = context.Rooms.ToList();
foreach (var Room in Rooms)
{
Room.LastUpdated = DateTime.Now;
}
Run Code Online (Sandbox Code Playgroud)
我尝试这样做时收到此错误:
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
我收到错误:
无法更新EntitySet - 因为它具有DefiningQuery并且<ModificationFunctionMapping>元素中不存在<UpdateFunction>元素以支持当前操作.
我正在对上下文进行大量更新而没有任何问题,只有当我尝试更新此特定实体时才会这样做.
我所有的搜索都显示了同样的事情,即我正在尝试更新的实体上没有声明主键.但是,我确实有一个主键声明...
你会如何评价每一个:
我喜欢我的SQL,因此一直是ADO.NET和存储过程的忠实粉丝,但我最近玩过Linq to SQL,并且被写出我的DataAccess层的速度和决定花费的速度感到震惊有一段时间真正理解Linq to SQL或EF ......或者两者都没有?
我只是想检查一下,这些技术中没有一个很大的缺陷会让我的研究时间变得毫无用处.例如,性能非常糟糕,对于简单的应用程序来说它很酷,但只能带你到目前为止.
更新: 您可以专注于EF VS L2S VS SP而不是ORM VS SP.我主要对EF VS L2S感兴趣.但我很想将它们与存储过程进行比较,因为普通的SQl是我所了解的很多东西.
这看起来像一个非常常见的任务,但我找不到一个简单的方法来做到这一点.
我想撤消上次应用的迁移.我本来期待一个简单的命令,比如
PM> Update-Database -TargetMigration:"-1"
Run Code Online (Sandbox Code Playgroud)
相反,我能想出的就是:
PM> Get-Migrations
Retrieving migrations that have been applied to the target database.
201208012131302_Add-SystemCategory
201207311827468_CategoryIdIsLong
201207232247409_AutomaticMigration
201207211340509_AutomaticMigration
201207200025294_InitialCreate
PM> Update-Database -TargetMigration:"CategoryIdIsLong"
Run Code Online (Sandbox Code Playgroud)
(至少我可以只使用名称,跳过时间戳......)
有没有更简单的方法?
entity-framework database-migration entity-framework-4 ef-migrations
我正在尝试在我的机器上安装的TeamCity上运行我的测试.
System.InvalidOperationException:实体框架提供程序类型" 为" 'ADO.NET提供程序无法加载.确保提供程序程序集可用于正在运行的应用程序.
System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServerVersion=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'System.Data.SqlClient
我没有参考System.Data.Entity任何我在codeplex上建议升级到EF6的项目.
所以,我不知道为什么我会得到这个例外.当我从VS运行测试时,我没有得到任何这样的异常.
我确实尝试将CopyLocal设置为false然后再次设置为true ..但这似乎也不起作用.
更新
我的app.config有以下内容.这会导致一些我不理解的行为吗?
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我在teamcity中得到以下stacktrace.
[MSTest] IntegrationTests.CrudTest+QuestionTest.Create
[03:59:11][IntegrationTests.CrudTest+QuestionTest.Create] Initialization method IntegrationTests.CrudTest+QuestionTest.Initialize threw exception. System.InvalidOperationException: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' for the 'System.Data.SqlClient' …Run Code Online (Sandbox Code Playgroud) 我一直在阅读很多文章,解释如何设置实体框架,DbContext以便每个HTTP Web请求只使用各种DI框架创建和使用一个.
为什么这首先是一个好主意?使用这种方法有什么好处?在某些情况下这是个好主意吗?在使用DbContext存储库方法调用实例化s 时,您是否可以使用此技术执行某些操作?
存在由实体框架生成的称为产品的实体类型.我写了这个查询
public IQueryable<Product> GetProducts(int categoryID)
{
return from p in db.Products
where p.CategoryID== categoryID
select new Product { Name = p.Name};
}
Run Code Online (Sandbox Code Playgroud)
下面的代码引发以下错误:
"无法在LINQ to Entities查询中构造实体或复杂类型Shop.Product"
var products = productRepository.GetProducts(1).Tolist();
Run Code Online (Sandbox Code Playgroud)
但是,当我使用select p而不是select new Product { Name = p.Name};它正常工作.
如何预先形成自定义选择部分?
我有一个包含5列的数据表,其中一行填充数据,然后通过事务保存到数据库.
保存时,会返回错误:
将datetime2数据类型转换为日期时间数据类型会导致超出范围的值
这意味着,正如所读,我的数据表有一种类型DateTime2和我的数据库a DateTime; 那是错的.
日期列设置为DateTime如下所示:
new DataColumn("myDate", Type.GetType("System.DateTime"))
题
这可以在代码中解决,还是必须在数据库级别上进行更改?
我在教程中看到了很多,导航属性为ICollection<T>.
这是实体框架的强制性要求吗?我可以用IEnumerable吗?
使用ICollection代替IEnumerable甚至是什么的主要目的是List<T>什么?
我一直在研究交易似乎因为我通过他们照顾自己的EF只要false到SaveChanges(),然后调用AcceptAllChanges(),如果没有错误:
SaveChanges(false);
// ...
AcceptAllChanges();
Run Code Online (Sandbox Code Playgroud)
如果事情变坏怎么办?我不必回滚,或者一旦我的方法超出范围,交易结束了吗?
在事务中途分配的任何indentiy列会发生什么?我认为如果其他人在我的事情发生之前添加了一条记录,那么这意味着会有一个缺失的身份值.
有没有理由TransactionScope在我的代码中使用标准类?
Include()方法适用于对象列表.但是,如果我需要深入两个级别呢?例如,下面的方法将返回ApplicationServers,其中包含此处显示的包含属性.但是,ApplicationsWithOverrideGroup是另一个容纳其他复杂对象的容器.我也可以在该属性上执行Include()吗?或者我如何才能完全加载该属性?
现在看来,这个方法:
public IEnumerable<ApplicationServer> GetAll()
{
return this.Database.ApplicationServers
.Include(x => x.ApplicationsWithOverrideGroup)
.Include(x => x.ApplicationWithGroupToForceInstallList)
.Include(x => x.CustomVariableGroups)
.ToList();
}
Run Code Online (Sandbox Code Playgroud)
将仅填充Enabled属性(下方),而不填充Application或CustomVariableGroup属性(如下所示).我该如何实现这一目标?
public class ApplicationWithOverrideVariableGroup : EntityBase
{
public bool Enabled { get; set; }
public Application Application { get; set; }
public CustomVariableGroup CustomVariableGroup { get; set; }
}
Run Code Online (Sandbox Code Playgroud) entity-framework ×10
c# ×8
asp.net ×2
.net ×1
ado.net ×1
code-first ×1
datetime ×1
dbcontext ×1
icollection ×1
linq-to-sql ×1
mstest ×1
orm ×1
primary-key ×1
sql ×1
sql-server ×1
teamcity-7.1 ×1
transactions ×1