标签: entity-framework-5

从ObjectContext转换DBContext

我在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)

如何转换这个功能?

或者如何制作这样的功能?

c# entity-framework .net-4.5 entity-framework-5

5
推荐指数
1
解决办法
7408
查看次数

保存枚举时值不正确

我将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

5
推荐指数
1
解决办法
809
查看次数

EF DB-first映射混乱

由于EF的这个小怪癖,我有一个令人沮丧的情况.这是一个简单的行为演示.首先是数据库架构:

在此输入图像描述

如您所见,RestrictedProduct是产品的一个特例,我打算Product用一些特殊的代码创建一个子类.

现在我导入到EF数据模型:

在此输入图像描述

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

在此输入图像描述

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

在此输入图像描述

不好了!该Product-Restriction协会以新名称(RestrictedProduct1)返回!另外,它不会编译:

错误3034:从行(x,y)开始映射片段时出现问题:具有可能不同键的两个实体映射到同一行.确保这两个映射片段将AssociationSet的两端映射到相应的列.

有没有办法防止这种行为,没有将Dummy字段保留在RestrictedProduct桌面上?

c# entity-framework database-first entity-framework-5

5
推荐指数
1
解决办法
508
查看次数

将自定义t4模板添加到DDL生成模板下拉列表

我知道我可以在文件夹中添加模板

C:\ Program Files(x86)\ Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen

使其在DDL生成模板下拉列表中可见,但随后我需要将模板分发给我的团队成员,以便他们可以将模板添加到同一文件夹中.

我希望通过以某种方式将模板添加到VS 2012解决方案并使其在同一下拉列表中可见,我可以获得相同的结果

你知道实现这个目标的方法吗?我正在使用VS 2012并生成数据库,我使用的是Model First方法

t4 entity-framework-5 ef-model-first

5
推荐指数
1
解决办法
1494
查看次数

实体框架代码在Enterprise中的适用范围

我需要决定大型企业应用程序的Entity框架的用法.我需要先决定EF数据/代码优先.

我的主要想法是不要将数据访问与数据库混合使用.我不希望任何工具生成/更新数据库.我可以先设计数据库模式,然后可以使用EF Data第一模型.这种方法的问题是

减少对EF和Huge配置生成的代码的控制

我可以使用代码第一种方法来解决上述问题.但代码拳的问题是与数据库和EF紧密集成.每当我更改模型时,我都需要创建迁移以更新对数据库的更改.我很担心"迁移"会对我的数据库所做的更改.此外,如果我们必须将这些更改应用于生产数据库,则它根本不可能,因为我们的开发团队将无法访问生产服务器.

我只是在考虑天气,首先选择EF代码作为企业应用程序的数据访问技术是一个不错的选择.

在没有上述问题的情况下,你们可以先建议使用EF代码吗?

entity-framework entity-framework-5

5
推荐指数
1
解决办法
729
查看次数

实体框架代码优先 - 如何在保存时忽略列

我有一个名为Client的类,它首先使用Entity Framework代码映射到数据库表.该表有一个我需要在Client类中可用的计算字段,但我知道不可能写入该字段.是否有一种方法可以在保存时配置实体框架以忽略该属性,但在读取时包含该属性?

我已尝试在配置类中使用Ignore方法,或使用[NotMapped]属性,但这些会阻止从数据库中读取属性.

.net c# entity-framework entity-framework-4.1 entity-framework-5

5
推荐指数
1
解决办法
8206
查看次数

存储库模式是否仅用于实体框架?

我已经使用Entity Frameworkrepository pattern一段时间了.

前几天我被问到不使用实体框架编写数据层,只是简单的旧版ADO.NET.我想知道最好的办法是什么?我是否还使用普通的旧ADO.NET为我的CRUD操作使用存储库模式?

如果我去Codeplex搜索存储库模式,那么99.9%的所有示例项目都使用Entity Framework.如果我使用普通的ADO.NET和存储过程,是否需要使用不同的模式?

.net c# ado.net entity-framework entity-framework-5

5
推荐指数
1
解决办法
3443
查看次数

ASP .Net实体框架.tt文件未嵌套在.edmx下

我在VS 2012 Update 2下运行ASP .NET(v4.5)网站项目.当我在App_Code文件夹下创建一个新的实体模型(.edmx)时,嵌套在.edmx文件下只有.Designer. cs和.edmx.diagram文件.关联的.tt文件不是嵌套的.我认为这就是为什么当我保存模型时,即使在模型属性中指定了该选项,T4模板也不会自动转换.

任何想法如何让这个工作?我不能在项目文件中使用DependentUpon XML标记,因为网站项目没有项目文件.

asp.net entity-framework-5 visual-studio-2012

5
推荐指数
1
解决办法
1341
查看次数

Linq查询在几分之一秒内运行,但.ToList()需要3.5秒

我正在运行一个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)

c# linq linq-to-entities entity-framework-5

5
推荐指数
1
解决办法
1927
查看次数

实体框架 - COUNT而不是SELECT

如果我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# sql sql-server entity-framework entity-framework-5

5
推荐指数
2
解决办法
1万
查看次数