IQueryable<Organization> query = context.Organizations;
Func<Reservation, bool> predicate = r => !r.IsDeleted;
query.Select(o => new {
Reservations = o.Reservations.Where(predicate)
}).ToList();
Run Code Online (Sandbox Code Playgroud)
此查询引发"内部.NET Framework数据提供程序错误1025"异常,但下面的查询不会.
query.Select(o => new {
Reservations = o.Reservations.Where( r => !r.IsDeleted)
}).ToList();
Run Code Online (Sandbox Code Playgroud)
我需要使用第一个,因为我需要检查一些if语句来构造正确的谓词.我知道在这种情况下我不能使用if语句,这就是我将委托作为参数传递的原因.
如何使第一个查询起作用?
.net c# entity-framework expression-trees entity-framework-4
对于一个新项目,我首先尝试创建我的业务类,然后再创建真正的数据库表.因此我正在使用Entity Framework 4 Designer.创建了一个新的"ADO.Net实体数据模型"文件,扩展名为.edmx.
我创建了两个实体:

我想在Product - > Group之间添加1到nc的关系.如果我首先创建了MSSQL数据库,我会在表产品中添加一个列IDGroup,并将Product.IDGroup引用到Group.IDGroup.据我所知,如果我向产品实体添加一个名为IDGroup的新属性,我无法在设计器中添加此类关联
这是我添加映射的方式:

结果如下:

现在这个问题的部分是:如果我将现有MSSQL数据库中的两个表添加到edmx文件中,我将收到编译错误:
Error 3027: No mapping specified for the following EntitySet/AssociationSet - GroupSet, ProductSet
Run Code Online (Sandbox Code Playgroud)
这个错误意味着什么,我该怎么做才能解决这个问题?如果我删除这两个表,我会收到警告:
Error 2062: No mapping specified for instances of the EntitySet and AssociationSet in the EntityContainer myContainer.
Run Code Online (Sandbox Code Playgroud)
有些东西告诉我,我这样做是错的,这只是基本的东西.我该怎么办?
如何告诉EF如何命名数据库以及将其放在何处?
如果Web.Config中没有连接字符串,它会尝试将其放在本地SQLEXPRESS服务器中,但我想将它放在已知的SQL Server上,并将其命名为我想要的.有什么建议?
我一直听说实体框架流利的api,但我很难找到一个很好的参考.它是什么?
我们使用实体框架和提供的建模工具.这就是全部吗?或者是不同的东西?
同样,如果问题不是太宽泛,POCO是什么?我知道它代表Plain Old CLR Objects,但对于我已经使用EF设计模型工具的人来说,这对我意味着什么呢?如果这个问题太模糊,那么请忽略它.我刚刚在这里学习,你愿意提供的任何信息都很有帮助.
我正在使用MVC3,并使用Entity Framework 4.0实体作为我的模型.到目前为止,就使用它作为模型而言,一切都很有效(所有的crud操作/页面生成开箱即用).我想知道,你如何获得与手动生成模型时相同的强大标签和验证信息?
这是我的意思的一个例子.这是一个由MVC3示例项目生成的类:
public class LogOnModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
通过上面的示例,您可以指定在字段的标签中显示的内容(显示)以及要使用的字段类型(密码).但是,当我尝试使用实体框架并将其推送到下面的视图时,我看到自动生成的标签只是字段名称,而不是我希望用户看到/必须阅读的内容:
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Person</legend>
<div class="editor-label">
@Html.LabelFor(model => model.FirstName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.FirstName)
@Html.ValidationMessageFor(model => model.FirstName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.MiddleName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.MiddleName)
@Html.ValidationMessageFor(model => model.MiddleName) …Run Code Online (Sandbox Code Playgroud) 我创建了一个"仅代码"POCO,用于使用Entity Framework 4和CTP4对现有数据库进行使用.当我运行查询时,我收到错误
自创建数据库以来,支持'xyzContext'上下文的模型已更改.手动删除/更新数据库,或使用IDatabaseInitializer实例调用Database.SetInitializer.例如,RecreateDatabaseIfModelChanges策略将自动删除并重新创建数据库,并可选择使用新数据对其进行种子设定.
我不清楚为什么会发生这种情况或者我可以改变什么.我只创建了POCO,定义了一个简单的DbContext,做了一些调整,然后尝试运行一个简单的查询.由于我使用的是"仅代码",因此我不知道需要进行任何配置设置.我当然不想重新创建或删除数据库,因为它是一个现有的数据库.
谢谢你的任何想法.
我试图处理单元测试一个非常简单的ASP.NET MVC测试应用程序,我使用最新的EF4 CTP中的Code First方法构建.我对单元测试/模拟等不太熟悉.
这是我的Repository类:
public class WeightTrackerRepository
{
public WeightTrackerRepository()
{
_context = new WeightTrackerContext();
}
public WeightTrackerRepository(IWeightTrackerContext context)
{
_context = context;
}
IWeightTrackerContext _context;
public List<WeightEntry> GetAllWeightEntries()
{
return _context.WeightEntries.ToList();
}
public WeightEntry AddWeightEntry(WeightEntry entry)
{
_context.WeightEntries.Add(entry);
_context.SaveChanges();
return entry;
}
}
Run Code Online (Sandbox Code Playgroud)
这是IWeightTrackerContext
public interface IWeightTrackerContext
{
DbSet<WeightEntry> WeightEntries { get; set; }
int SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
......及其实现,WeightTrackerContext
public class WeightTrackerContext : DbContext, IWeightTrackerContext
{
public DbSet<WeightEntry> WeightEntries { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的测试中,我有以下内容:
[TestMethod]
public void Get_All_Weight_Entries_Returns_All_Weight_Entries() …Run Code Online (Sandbox Code Playgroud) 如何使用codefirst EF4创建非持久属性?
MS说有一个StoreIgnore属性,但我找不到它.
有没有办法使用EntityConfiguration设置它?
目前我正在将我的应用程序部署到共享托管环境,并且代码优先与迁移一直很有效,除了一个小的打嗝.每次我想推送网站时,我都必须使用"Update-Database -script"选项,因为我必须在每个表名前加上,[dbo]因为默认情况下共享主机会创建一个与数据库用户名同名的默认模式名称.
如果我登录我的共享主机并创建数据库,那么我必须创建一个用户.如果我将该用户命名为admin,则代码优先创建,同时以管理员身份登录,如"[admin].[BlogPosts]".当应用程序运行时,所有表都被创建但我得到了EF异常,因为它说"[dbo].[BlogPosts]"无效.如果我将表的架构名称重命名为"[dbo]"而不是"[admin]"来修复它.
为了解决这个问题,我必须生成一个手动执行的迁移脚本,并在所有表名前添加"[dbo]",因为脚本只按名称引用表,而不是它们的模式和名称.
有没有一种简单的方法来解决这个问题?如果我所要做的就是发布应用程序和一切正常工作,那将是如此美好.如果它不是模式名称的差异,它将是一键式部署,一切都将是光荣的.
所以,我的EF模型有关系,根据我在例子中看到的,这些关系应该用ICollection的虚拟属性来完成.
例:
public class Task
{
public int Id { get; set; }
public string Description { get; set; }
public virtual ICollection<SubTask> { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我在某处读到了我应该使用IEnumerable来防止延迟执行,这是正确的吗?这意味着如果我的DAL方法返回IEnumerable,仍然是IQueryable,那么SQL将在那一刻执行,而不是在我在网页中调用.TOList时.
那么,最佳做法是什么?我该怎么回事?IEnumerable,List?,IList,ICollection?
谢谢