标签: entity-framework-5

具有多个结果集的实体框架5存储过程

我目前正在使用asp.net mvc 4.5和EF5 Beta 2进行编码,我有一个存储过程,它返回多个结果集.我找到了这个网站,它说新版本(我正在使用)已经支持多个结果集.

现在我似乎无法找到那种支持.由于我完全不熟悉EF,我希望我没有做错事.

我的数据库中没有相应的实体来创建结果集.

c# entity-framework asp.net-mvc-4 entity-framework-5

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

实体框架代码首先使用TimeStamp类型

我正在使用SQL Server 2008 R2和Entity Framework 5.0.生成数据库时,我无法在没有以下错误的情况下添加TimeStamp类型的属性:没有与概念方类型对应的商店类型

原始类型"时间"的'Edm.Time(Nullable = True,DefaultValue =,Precision =)'.

我已将实体配置设置为类型时间或时间戳,但未成功

Property(x => x.RestBetweenSet).HasColumnType("timestamp");
Run Code Online (Sandbox Code Playgroud)

当我进入Sql Server Management Studio并编辑表时,我可以设置一列时间戳.

要让Entity Framework代码首先能够生成此列,我需要做什么?

谢谢

.net entity-framework sql-server-2008 asp.net-4.0 entity-framework-5

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

实体框架导航属性为null

我有2个简单的类:

public class Setting
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid SettingId { get; set; }

    [Required]
    public String Name { get; set; }

    public String Value { get; set; }

    [Required]
    public SettingCategory SettingCategory { get; set; }
}

public class SettingCategory
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid SettingCategoryId { get; set; }

    [Required]
    public String Value { get; set; }

    public ICollection<Setting> Settings { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我SettingCategory从数据库中检索a时,集合Settings始终为null.

当我做它virtual然后会说:The ObjectContext instance has been disposed and …

entity-framework ef-code-first entity-framework-5

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

实体框架渴望加载多个级别异常

好的,所以根据这个页面,实体框架应该通过SelectInclude方法中使用a来急切地加载多个级别.

我有以下代码:

var reports = _context.Reports
    .Include(rt => rt.Fields)
    .Include(rt => rt.Fields.Select(f => f.FieldType))
    .Include(rt => rt.Fields.Select(f => f.FieldType.FieldIdentifier));
Run Code Online (Sandbox Code Playgroud)

然而,这会InvalidOperationException在第二个包含的调用中抛出一个"无效的表达式".异常来自EntityFrameworkHelper.CollectRelationalMemebers.

我也尝试将字符串用于Include相关属性,但也失败了(如果可能的话,我宁愿避免使用字符串).

我正在使用适用于.NET 4.0的EF 5.0 DLL.我的EF类是老式的数据库优先EntityObject.

有没有人知道原因,我是否可以对此例外做些什么?

编辑:

使用字符串版本时:

var reports = _context.Reports
    .Include("Fields")
    .Include("Fields.FieldType")
    .Include("Fields.FieldType.FieldIdentifier"));
Run Code Online (Sandbox Code Playgroud)

它抛出InvalidOperationException- 表达式的无效类型.

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

6
推荐指数
2
解决办法
6364
查看次数

如何找到UIHInt属性的target属性?

我有以下UIHInt基于attibute:

[AttributeUsage(AttributeTargets.Property)]
public class DropDownListAttribute : UIHintAttribute, IMetadataAware
{
    public DropDownListAttribute(string selectListName)
        : base(KnownUiHints.DropDown, KnownPresentationLayers.Mvc, selectListName)
    {
        SelectListName = selectListName;
    }

    public string SelectListName { get; set; }

    public void OnMetadataCreated(ModelMetadata metadata)
    {
        metadata.AdditionalValues[KnowMetadataKeys.SelectListName] = SelectListName;
    }
}
Run Code Online (Sandbox Code Playgroud)

它的目的是将SelectList分配给要从列表中选择的单值视图模型属性,如下所示:

public class DemoModel: ViewModel
{
    [Required]
    [DropDownList("LanguageSelect")]
    [Display(Name = "Language")]
    public int? LanguageId { get; set; }

    public SelectList LanguageSelect { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我现在正在使用一些很棒的Golbergian机器和我自己的元数据提供商,但是IMetadataAware.OnMetadataCreated我发现,我觉得我可以简化这个.现在我添加SelectListName到元数据,然后跳过一些箍到a)将SelectList变成一种全局字典,b)在渲染下拉列表时从该字典中获取选择列表.

我想将SelectList本身添加到属性中的模型元数据,即属性适用的属性的本地元数据,但是如何访问该属性或它包含类型?

entity-framework data-annotations entity-framework-5 asp.net-mvc-uihint

6
推荐指数
1
解决办法
328
查看次数

寻找行为类似InRequestScope的Ninject范围

在我的服务层上,我UnitOfWork在构造函数中注入了一个和两个存储库.工作单元和存储库有一个DbContext我想在两者之间共享的实例.我怎么能用Ninject做到这一点?应考虑哪个范围?

不在网络应用程序中,所以我无法使用InRequestScope.

我尝试做类似的事情......然而我正在使用DI,我需要我的UoW Dispose并且像这样创建.

using (IUnitOfWork uow = new UnitOfWorkFactory.Create())
{
    _testARepository.Insert(a);
    _testBRepository.Insert(b);

    uow.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

编辑:我只是想确定我理解...看看https://github.com/ninject/ninject.extensions.namedscope/wiki/InNamedScope我虽然关于我当前使用Ninject的控制台应用程序架构.

让我们说:

A类是服务层类

B类是一个工作单元,它接受参数接口(IContextFactory)

C类是一个接口参数的存储库(IContextFactory)

这里的想法是能够在2个或更多存储库上执行上下文操作,并使用工作单元来应用更改.

D类是一个上下文工厂(实体框架),它提供了一个实例(保存在容器中)的上下文,它在Class B et C之间共享(并且将用于其他存储库).

上下文工厂将实例保存在他的容器中,所以我不想重复使用这个实例的所有名称,因为上下文需要在服务操作结束时处理..实际上InNamedScope的主要目的是什么?

解决方案是,但我不确定我做得对,服务实例将是transcient,这意味着他们实际上从未处理过?:

Bind<IScsContextFactory>()
    .To<ScsContextFactory>()
    .InNamedScope("ServiceScope")
    .WithConstructorArgument(
         "connectionString", 
         ConfigurationUtility.GetConnectionString());

Bind<IUnitOfWork>().To<ScsUnitOfWork>();

Bind<IAccountRepository>().To<AccountRepository>();
Bind<IBlockedIpRepository>().To<BlockedIpRepository>();

Bind<IAccountService>().To<AccountService>().DefinesNamedScope("ServiceScope");
Bind<IBlockedIpService>().To<BlockedIpService>().DefinesNamedScope("ServiceScope");
Run Code Online (Sandbox Code Playgroud)

ninject unit-of-work repository-pattern entity-framework-5

6
推荐指数
1
解决办法
6521
查看次数

为什么Entity Framework会忽略我的连接字符串?

我有一个连接字符串:

<add name="Gini" providerName="System.Data.SqlClient" connectionString="user id=user;Password=pa55;Data Source=server;Database=gini" />

我希望EF能够通过迁移来控制数据库的创建和更新,因此我让它可以完全控制数据库.

我的联系人类如下所示:

public class GiniContext : DbContext
{
    public DbSet<UserSession> UserSessions { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new UserSessionConfiguration());
    }

    public GiniContext() : base("Gini")
    {
        Database.Create();
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望这可以使用上面的用户名和密码在名为"server"的服务器上创建一个名为"gini"的数据库,但是它会在(LocalDB)\ v11.0实例上创建它.

我究竟做错了什么?

sql-server entity-framework entity-framework-5

6
推荐指数
1
解决办法
934
查看次数

如何处理实体框架中的主键5代码优先

在我的EF5代码优先模型中,如果数据库设置主键,则创建新记录会更好.我使用Guid作为主键,如果DatabaseGeneratedOption.Identity设置了,SQL Server将始终创建uniqueidentifier.

但是,当我尝试初始化数据库时,这会导致问题.如果我在种子方法中设置Guid,SQL Server会覆盖它.如果我没有设置Guid,我每次都会得到一条新记录.使用预先设置的Guids为数据库播种并DatabaseGeneratedOption.Identity为我的正常操作保留设置的推荐解决方案是什么?

示例类模型:

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public RecordName { get; set; }
public DateTime? Created { get; set; }
public DateTime? Updated { get; set; }
Run Code Online (Sandbox Code Playgroud)

示例种子方法:

var record = new Record()
            {
                Id = new Guid("3B80725E-9550-4933-807F-C2FAA0942225"),
                RecordName = "New Record",
                Created = DateTime.UtcNow,
                Updated = DateTime.UtcNow,
             };
context.Record.AddOrUpdate(record);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

c# sql entity-framework entity-framework-5

6
推荐指数
1
解决办法
5619
查看次数

实体框架5 codefirst /必需和可选的外键关系为空

我想在entityframework5 codefirst方式上用我的entites创建一个DbContext.我有品牌,类别和产品.

但是当我试图获得ProductBrand并且Category字段为空时.Category是可选的但Brand不是.所以至少必须设置品牌领域.我试过下面的代码.有什么我想念的吗?

    public DbSet<Brand> Brands { get; set; }
    public DbSet<Product> Products { get; set; }
    public DbSet<Category> Categories { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Brand>()
            .HasMany(b => b.Products)
            .WithRequired(p => p.Brand)
            .HasForeignKey(p => p.BrandId);

        modelBuilder.Entity<Category>()
            .HasMany(c => c.Products)
            .WithOptional(p => p.Category)
            .HasForeignKey(p => p.CategoryId);
    }
Run Code Online (Sandbox Code Playgroud)

在MVC控制器方面:

    using (var db = new InonovaContext())
    {
        var product = db.Products.Single(p => p.Id == id);
        model.Description = product.Description; …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework foreign-key-relationship ef-code-first entity-framework-5

6
推荐指数
1
解决办法
7237
查看次数

使用TPH和复杂类型时LINQ to Entities的初始性能问题,Pregen Views似乎什么都不做?

我正在使用MVC3,ASP.NET 4.5,LINQ to Entities,EF5和SQL Server 2008 R2以及Azure(用于实时).

我在一个单独的模型项目中为模型创建csdl,edml,msl和ssdl文件.

这些文件由Devart的Entity开发人员生成,我在那里管理我的实体模型.

目标:实体框架5

  • 延迟加载:已启用
  • 查看生成:真实
  • 构建验证:正确
  • 元数据工件处理:嵌入输出程序集
  • 使用ObjectContext
  • ObjectContext代理创建已启用:true.

我在我的实体模型中实现了TPH继承,其中子类也由最多10种复杂类型(CTn)组成.

Animal<-Cat(CT1,CT2,CT3 etc) (for example)
Run Code Online (Sandbox Code Playgroud)

每种复杂类型都映射到通用动物表中的列.

我最初的LINQ是:

if (db.Animal.OfType<Cat>().Any(a => a.OwnerId == myOwnerId))
Run Code Online (Sandbox Code Playgroud)

当这是第一次运行时,可能需要大约40秒才能完成.连续运行大约需要200ms.

当我使用ORM Profiler进一步分析时,它给出了LINQ代码:

Cat.MergeAs(0).Any(a => a.OwnerId == ((Nullable<int>)myOwnerId))
Run Code Online (Sandbox Code Playgroud)

我发现了一个很好的问题:相关SO问题,但它不够深入.虽然它建议升级到EF6,但它没有提到新的EF6问题,因为它现在是.NET运行时的外部,因此必须在首次使用时JIT EF运行时.也许在更高版本的EF6即6.1.2中,这已经解决了.

一旦EF创建了T-SQL,它就会非常快速地运行.我在SSMS中对此进行了测试.

所以我的问题,截至2014年11月,由以下部分组成:

1)如何尝试预生成的视图,我如何解决TPH /复杂类型场景的初始加载延迟.我见过对"编译查询"的引用.

2)也许我应该升级到EF6?但是,如果我这样做,现在EF运行时本身会有JIT惩罚,我应该如何解决这个问题.我部署到Azure网站.

3)最后我发现其他更简单的查询得益于预生成的视图,所以我正在使用它们.它仅适用于此TPH /复杂类型场景,它没有任何影响.是否存在pregen视图没有影响的情况?

4)可能3)由于EF5现在可以"自动编译查询"所花费的时间.已经预先生成了View,我想这是下一个瓶颈.也许像我这样的复杂实体的这种"自动编译"功能需要很长时间,因此可以进行主动手动编译吗?Quess这就是所谓的"CompiledQuery".是否与编写这些额外的代码相关,或者EF6x会帮助我吗?我有一个强烈的预感,这个查询编译步骤是瓶颈,但也意识到编写编译查询也不一定是最容易和可维护的解决方案.目前我们有一个周期性的启动工作,只是预热所有这些复杂的实体,因此用户直接进入"热查询执行模式".

任何有关上述内容的帮助都将非常感激.

EDIT1

我刚刚使用了JetBrains的DotTrace配置文件,它更深入,它似乎证实我的瓶颈正在发生:

System.Data.Query.PlanCompiler.PreProcessor.Process(Dictionary[EdmFunctionEdmProperty[]]&)
Run Code Online (Sandbox Code Playgroud)

在第一次点击时,它在这里花费99%的时间,这证实了我的观点,即它与查询计划生成有关.我如何解决这个问题是另一回事.

EDIT2

我将通过一些好的建议和Julie Lerman关于Pluralsight的优秀课程来测试EF 6.1.2.

linq-to-entities entity-framework entity-framework-5 entity-framework-6

6
推荐指数
1
解决办法
356
查看次数