我在EntityFramework 4.0(ObjectContext)中使用此函数.现在我正在使用EF 5.0.我的问题是DefaultContainerName,GetObjectByKey找不到的方法DBContext
public static T GetObjectByID<T>(int ID, string tableName = "")
{
var localDB = new LocalBaseEntities();
string entitySetName = string.Format("{0}.{1}", localDB.DefaultContainerName, string.IsNullOrEmpty(tableName) ? typeof(T).Name + "s" : tableName);
try
{
IEnumerable<KeyValuePair<string, object>> entityKeyValues =
new KeyValuePair<string, object>[] { new KeyValuePair<string, object>(typeof(T).Name + "ID", ID) };
EntityKey key = new System.Data.EntityKey(entitySetName, entityKeyValues);
return (T)localDB.GetObjectByKey(key);
}
catch (Exception)
{ }
return default(T);
}
Run Code Online (Sandbox Code Playgroud)
如何转换这个功能?
或者如何制作这样的功能?
我将Entity Framework 5 Enums映射到迁移中的整数列时遇到一些困难.这是代码的样子:
[Table("UserProfile")]
public class UserProfile
{
public enum StudentStatusType
{
Student = 1,
Graduate = 2
}
[Key]
public int UserId { get; set; }
public string UserName { get; set; }
public string FullName { get; set; }
public StudentStatusType Status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
迁移看起来像这样:
public partial class EnumTest : DbMigration
{
public override void Up()
{
AddColumn("UserProfile", "Status", c => c.Int(nullable: false, defaultValue:1));
}
public override void Down()
{
DropColumn("UserProfile", "Status");
}
} …Run Code Online (Sandbox Code Playgroud) c# entity-framework code-first ef-migrations entity-framework-5
由于EF的这个小怪癖,我有一个令人沮丧的情况.这是一个简单的行为演示.首先是数据库架构:

如您所见,RestrictedProduct是产品的一个特例,我打算Product用一些特殊的代码创建一个子类.
现在我导入到EF数据模型:

哎呀!EF看到RestrictedProduct只有2个字段,都是FK,所以它将它映射为Product和之间的一对多关系Restriction.所以我回到数据库并添加一个Dummy字段RestrictedProduct,现在我的EF模型看起来好多了:

但那个Dummy领域是愚蠢而毫无意义的.也许我可以删除它?我从数据库表和实体模型中删除了该字段,然后从数据库刷新模型...

不好了!该Product-Restriction协会以新名称(RestrictedProduct1)返回!另外,它不会编译:
错误3034:从行(x,y)开始映射片段时出现问题:具有可能不同键的两个实体映射到同一行.确保这两个映射片段将AssociationSet的两端映射到相应的列.
有没有办法防止这种行为,没有将Dummy字段保留在RestrictedProduct桌面上?
我知道我可以在文件夹中添加模板
C:\ Program Files(x86)\ Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen
使其在DDL生成模板下拉列表中可见,但随后我需要将模板分发给我的团队成员,以便他们可以将模板添加到同一文件夹中.
我希望通过以某种方式将模板添加到VS 2012解决方案并使其在同一下拉列表中可见,我可以获得相同的结果
你知道实现这个目标的方法吗?我正在使用VS 2012并生成数据库,我使用的是Model First方法
我需要决定大型企业应用程序的Entity框架的用法.我需要先决定EF数据/代码优先.
我的主要想法是不要将数据访问与数据库混合使用.我不希望任何工具生成/更新数据库.我可以先设计数据库模式,然后可以使用EF Data第一模型.这种方法的问题是
减少对EF和Huge配置生成的代码的控制
我可以使用代码第一种方法来解决上述问题.但代码拳的问题是与数据库和EF紧密集成.每当我更改模型时,我都需要创建迁移以更新对数据库的更改.我很担心"迁移"会对我的数据库所做的更改.此外,如果我们必须将这些更改应用于生产数据库,则它根本不可能,因为我们的开发团队将无法访问生产服务器.
我只是在考虑天气,首先选择EF代码作为企业应用程序的数据访问技术是一个不错的选择.
在没有上述问题的情况下,你们可以先建议使用EF代码吗?
我有一个名为Client的类,它首先使用Entity Framework代码映射到数据库表.该表有一个我需要在Client类中可用的计算字段,但我知道不可能写入该字段.是否有一种方法可以在保存时配置实体框架以忽略该属性,但在读取时包含该属性?
我已尝试在配置类中使用Ignore方法,或使用[NotMapped]属性,但这些会阻止从数据库中读取属性.
.net c# entity-framework entity-framework-4.1 entity-framework-5
我已经使用Entity Framework了repository pattern一段时间了.
前几天我被问到不使用实体框架编写数据层,只是简单的旧版ADO.NET.我想知道最好的办法是什么?我是否还使用普通的旧ADO.NET为我的CRUD操作使用存储库模式?
如果我去Codeplex搜索存储库模式,那么99.9%的所有示例项目都使用Entity Framework.如果我使用普通的ADO.NET和存储过程,是否需要使用不同的模式?
我在VS 2012 Update 2下运行ASP .NET(v4.5)网站项目.当我在App_Code文件夹下创建一个新的实体模型(.edmx)时,嵌套在.edmx文件下只有.Designer. cs和.edmx.diagram文件.关联的.tt文件不是嵌套的.我认为这就是为什么当我保存模型时,即使在模型属性中指定了该选项,T4模板也不会自动转换.
任何想法如何让这个工作?我不能在项目文件中使用DependentUpon XML标记,因为网站项目没有项目文件.
我正在运行一个Linq查询,返回大约25条记录,每条记录有10个数字列.根据我的代码分析器,查询本身只需要几分之一秒 - 但调用.ToList()大约需要3.5秒.如上所述,从SQL返回的数据量是微不足道的,因此将其复制到a中所花费的时间List不应该是繁重的.
为什么.ToList()要这么久?怎么可以改进?
编辑:赞赏所有快速答案,让我更清楚地说明:我完全意识到查询是延迟加载的事实.我看到的现象是,SQL Server Profiler和ANTS Performance Profiler都报告实际查询执行时间只有几分之一秒.
这是ANTS的屏幕截图:

请注意,调用方法需要4.3秒,而实际的SQL查询都不会超过.05秒.可能是该方法中的其他代码,而不是SQL?让我们看看ANTS如何在这里分解代码配置文件:

吸烟枪证明:.ToList()需要3.36秒,其中0.05秒可归因于实际查询执行时间,留下3.31秒下落不明.
那个时间去哪儿了?
编辑2:好的,你问过它,所以这是我的代码:
public static Expression<Func<Student, Chart>> GetStudentAssessmentQuestionResultByStudentIdNew(MyDataEntities db)
{
return s => new Chart
{
studentID = s.ID,
Lines =
db.StudentAssessmentAnswers
.Where(
saa =>
saa.StudentAssessment.BorrowedBook.StudentID == s.ID && saa.PointsAwarded != null &&
saa.Question.PointValue > 0 &&
(saa.Question.QuestionType == QuestionType.MultipleChoice ||
saa.Question.QuestionType == QuestionType.OpenEnded))
.GroupBy(
saa =>
new
{
saa.StudentAssessment.AssessmentYear,
saa.StudentAssessment.AssessmentMonth,
saa.Question.CommonCoreStandard
},
saa => saa)
.Select(x …Run Code Online (Sandbox Code Playgroud) 如果我GetFoo().Count()从我的数据库类之外的方法调用,实体框架5执行的查询效率相当低,而不是COUNT.从阅读像其他一些问题,这个,我看这是预期的行为.
public IEnumerable<DbItems> GetFoo()
{
return context.Items.Where(d => d.Foo.equals("bar"));
}
Run Code Online (Sandbox Code Playgroud)
因此我在我的DB类中添加了一个count方法,它正确执行COUNT查询:
public int GetFooCount()
{
return context.Items.Where(d => d.Foo.equals("bar")).Count();
}
Run Code Online (Sandbox Code Playgroud)
为了避免多次指定查询,我想将其更改为以下内容.然而,这再次执行SELECT,即使它在DB类中.这是为什么 - 我怎么能避免它?
public int GetFooCount()
{
return this.GetFoo().Count();
}
Run Code Online (Sandbox Code Playgroud) c# ×7
.net ×2
.net-4.5 ×1
ado.net ×1
asp.net ×1
code-first ×1
linq ×1
sql ×1
sql-server ×1
t4 ×1