标签: entity-framework-5

EF 迁移的 Web.config 配置

我正在我的项目中实施代码优先迁移,并且不想一直在包管理器控制台中使用 Add-Migration 和 Update-Database。我希望对数据库的更新自动发生。

出于这个原因,我更新了我的 web.config 文件来做到这一点。我删除了我的数据库,但由于某种原因,当我启动应用程序时,它没有创建数据库。难道我做错了什么?

这是我的 web.config

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <contexts>
      <context type="AuctionService.DataAccess.AuctionContext, AuctionService.DataAccess">
        <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[AuctionService.DataAccess.AuctionContext, AuctionService.DataAccess], [AuctionService.DataAccess.Migrations.Configuration, AuctionService.DataAccess]], EntityFramework">
        </databaseInitializer>
      </context>
    </contexts>
  </entityFramework>
Run Code Online (Sandbox Code Playgroud)

编辑

我的代码在 WCF 服务中,当我调试这个服务时,我得到了这个

服务器在处理请求时遇到错误。异常消息是“无法更新数据库以匹配当前模型,因为存在挂起的更改并且自动迁移被禁用。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将 DbMigrationsConfiguration.AutomaticMigrationsEnabled 设置为 true 以启用自动迁移。

web-config entity-framework-5 entity-framework-migrations

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

实体框架代码首先在类布尔值和列整数之间进行转换

我正在使用Entity Framework 5 code first. 我的表有一个名为的列Active,它的数据类型是类型int。存储在 Active 中的值为01null

我有一个类需要映射到这个表。

public class CommandExecutionServer : IEntity
{
     public int Id { get; set; }

     public bool? IsActive { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我的配置文件。我试图将我的类中的布尔属性映射到数据库中的整数字段。

class CommandExecutionServerConfiguration : EntityTypeConfiguration<CommandExecutionServer>
{
     internal CommandExecutionServerConfiguration()
     {
          this.ToTable("tblCommandExecutionServers");
          this.Property(x => x.IsActive).HasColumnName("Active").HasColumnType("bit");
     }
}
Run Code Online (Sandbox Code Playgroud)

这不是很好。我得到的错误是:

The 'IsActive' property on 'CommandExecutionServer' could not be set to a 'Int32' value. You must set this property to a non-null value …
Run Code Online (Sandbox Code Playgroud)

ado.net entity-framework entity-framework-4 entity-framework-4.1 entity-framework-5

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

Comparing a nullable column throws "Unable to cast the type..." exception

My entity NewsItem has a nullable foreign key property: LibraryID of type int?.

My issue is when I query the property and compare it with any value except null, I get exceptions.

Initially my code was:

int? lid = ...
var results = context.NewsItems
    .Where(n => n.LibraryID == lid);
Run Code Online (Sandbox Code Playgroud)

but it gives me no results at all, no matter what lid is.

So, I tried:

var results = context.NewsItems
    .Where(n => n.LibraryID.Equals(lid));
Run Code Online (Sandbox Code Playgroud)

gives exception:

Unable to create a …

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

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

适用于所有实体的实体框架动态 DbSet

我有一个用实体框架映射的数据库,

我需要实现一个通用方法来根据我传递的参数获取项目列表:

getGenericList("product"); // returns the list of products
getGenericList("customer"); // returns the list of customers
Run Code Online (Sandbox Code Playgroud)

我需要动态获取dbSet. 我的方法是这样实现的:

public static List<object> getGenericList(string entityType)
    {
        List<object> myDynamicList = new List<object>();
        using (cduContext db = new cduContext())
        {
            DbSet dbSet = db.getDBSet(entityType);
            var myDynamicList = dbSet.Select(p => p).ToList();
        }
        return new List<object>();
    }
Run Code Online (Sandbox Code Playgroud)

dbSets首先由 EF 代码自动生成:

public DbSet<Product> Products { get; set; }
public DbSet<Custommer> Custommers { get; set; }
Run Code Online (Sandbox Code Playgroud)

我的getDBSet(entityType)方法是在上下文中实现的,如下所示:

public DbSet<T> getDBSet<T>(string entityName) where …
Run Code Online (Sandbox Code Playgroud)

linq-to-entities dynamic-data auto-generate entity-framework-5

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

MVC 4 - 带空格的 EF 模型

我正在 C#/ASP.NET MVC 4/EF5 中开发一个项目。现有数据库的列名中有空格,我从未遇到过,无权更改,也不知道如何解决。

我已经尝试了很多东西来读取列名,包括下面,但无法弄清楚。这是代码的简化版本,我尝试过但没有奏效(如果需要,我很乐意提供更多代码):

using System;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using System.Data.Linq.Mapping;

namespace Domain.Entities
{
    public class TheTable
    {
        public int id { get; set; }

        [Column(Name="The Column Name")]
        public int TheColumnName { get; set; } 
    }
}
Run Code Online (Sandbox Code Playgroud)

结果我总是得到这个:

无效的列名“TheColumnName”。

顺便说一句,我可以成功连接到所有没有空格的列。谢谢你的帮助!

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

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

EF与Nhibernate合并断开的对象图

我刚刚在几个星期前开始了一个新项目并决定尝试使用EF Code First,之前我使用过NHIbernate,我喜欢让MS出现一个ORM的想法,到目前为止它一直都很棒 - 直到我开始制作复杂的物体.

我的项目层如下:Azure WCF角色 - 使用EF Code First处理DAL.带有Knockout的MVC 4的Azure WebSite角色 - 处理客户端.(我为未来创建了WCFRole,我们需要从不同平台访问服务)

这是非常基本的EF Code First设计,我遇到了以下问题: - 我只在服务和站点之间传输DTO,并制作了一个通用映射器来映射内部DTO(如果存在). - 我有一个City表和一个带有City Property的地址对象(我们需要City作为特殊功能的属性,而不仅仅是名称)

客户端知道城市列表,并返回一个现有城市的新地址当我尝试添加新地址时,会创建一个新城市,其中包含现有旧城市的数据,我已经知道这是因为EF没有我不知道如何合并断开连接的对象和我读的不支持任何合并,并且简单的不太舒服的解决方案只是管理对象状态 - 将City对象状态更改为Unchanged.

但是使用大型复杂数据库设计来处理这个问题听起来很糟糕

我的问题 - 处理这个问题的最佳做法/简单方法是什么?我想过一些解决方案 - 覆盖SaveChanges方法遍历所有对象,如果ID不是null/0 /其他一些约定将其从Added更改为Unchanged - 这个解决方案可以完成吗?

我的第二个问题 - 因为我对NHibernate(连接对象)有很多经验 - 我想知道NHibernate对此有何看法?我在某处读到NHibernate确实具有重新连接断开的复杂对象的AutoMagic Merge功能,这是真的吗?我的基本断开连接的地址 - >城市设计是否会与AutoMagic Merge一起开箱即用?使用它的后果是什么?

非常感谢 :)

更新:该问题的简化代码.

public class Address
{
    public int ID { get; set; }

    public virtual City City { get; set; }
}

public class City
{
    public int ID { get; set; }

    public string …
Run Code Online (Sandbox Code Playgroud)

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

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

实体框架数据库首先如何更改实体以使它们从基类派生

我有一个数据库已经充满了包含数据的表.我所看到的是所有表共有5列:

  • Id-long,key
  • IsDeleted,位
  • DateDeleted,SmallDatetime
  • LastUpdated,SmallDatetime
  • LastUpdatedUser,nvarchar

现在,有一些常见的操作是基于当前在任何地方复制的那些字段完成的

我想要的是创建一个基类,它只包含这些公共属性和为它们完成的方法,并使每个其他实体派生自此.

我不需要或者想要在数据库本身上拥有这个基本实体,这只是我想帮助编码部分的东西.

问题是这是数据库第一,我不能改变数据库所以我必须使用的是POCO类和EDMX.

我怎样才能实现这一目标?

.net c# entity-framework ef-database-first entity-framework-5

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

实体框架COUNT性能差

使用带有MySql Connector 6.6.6.0的Entity Framework 5.0进行基于计数的查询时,我们遇到的性能非常差.我们的数据结构如下:

Table: Post
===========
ID           INT PRIMARY KEY
MemberID     INT NOT NULL
SiteID       INT NOT NULL
Description  VARCHAR(255) NOT NULL
Image        VARCHAR(255) NOT NULL
CreatedDate  DATETIME NULL

并使用具有linq查询的实体框架,如下所示:

var count = entities.Post.Where(p => 
    p.SiteID == 1 && p.CreatedDate != null).Count();

我们得到以下生成的SQL:

SELECT
`Extent1`.`ID`, 
`Extent1`.`MemberID`, 
`Extent1`.`SiteID`, 
`Extent1`.`Description`, 
`Extent1`.`Image`, 
`Extent1`.`CreatedDate`
FROM `Post` AS `Extent1`
 WHERE (`Extent1`.`SiteID` = 1) AND (`Extent1`.`CreatedDate` IS NOT NULL)

这会读取所有记录并将其计入内存中......效率极低,因为它应该类似于:

SELECT COUNT(ID) FROM `Post` WHERE `SiteID` = 1 AND `CreatedDate` IS NOT NULL;

反正有没有提示我们不想将所有记录读入内存并只执行SQL …

c# entity-framework entity-framework-5 entity-framework-6

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

IQueryable和DbQuery有什么区别?

跟进此问题/答案
如何使实体框架数据上下文只读

解决方案是使您的DbContext集合的类型为DbQuery,但这是一个相当特殊的类型(它埋在EF的名称空间中)。

因此,具有DbContext的功能之间有什么区别:

public DbQuery<Customer> Customers
{
    get { return Set<Customer>().AsNoTracking(); }
}
Run Code Online (Sandbox Code Playgroud)

与这个:

public IQueryable<Customer> Customers
{
    get { return Set<Customer>().AsNoTracking(); }
}
Run Code Online (Sandbox Code Playgroud)

...关于DbQuery类,EF文档非常简单,但是我更喜欢让DbContext由接口而不是由类组成的想法,因此我想避免这种情况。DbQuery类还提供哪些其他好处?

更新资料

阅读答案并查看代码后,我意识到我的问题有点傻。我想得太快了!显然,底层的具体对象无论如何都将是DbQuery,因此实际的内部功能将是相同的。在我看来,使用IQueryable是更好的选择。谢谢你的耐心!

.net c# datacontext entity-framework-5

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

启动2个DBContext对象,一个用于日志,另一个用于c#控制台应用程序中的业务数据

我正在研究ac#console应用程序,我使用实体框架5.0作为sql server的数据访问层.现在我想跟踪更改并将它们保存在日志表中.所以这样做我发起了2个DbContext对象,一个用于业务数据,另一个用于日志数据,如下所示:

class Sync
    {
        static void Main(string[] args)
        {
            string syncResult = "Sync started";
            Entities entities = new Entities();//for business data
            Entities entities2 = new Entities();//for logs
            try
            {
              //code goes here
              entities.SaveChanges();
            }
            catch (Exception e)
            {
                syncResult = string.IsNullOrEmpty(e.Message) ? "Error" : e.Message;

            }
            entities.Dispose();
            entities2.LogHistories.Add(new LogHistory() { Description = syncResult });
            entities2.SaveChanges();
            entities2.Dispose(); 
Run Code Online (Sandbox Code Playgroud)

现在我为我的日志提供了单独的DbContext对象,原因如下: -

  1. 如果我的第一个实体对象由于任何原因(例如未处理的验证错误或尝试破解系统等)而无法保存更改,则第二个实体2仍将能够保存日志条目.让我们举个例子.假设我正在使用第三方API进行集成,我期望它们以特定格式返回JSON.现在让我们假设返回json对象缺少数据,在这种情况下,当我尝试添加它将引发的对象时,它会异常...现在因为我有日志的单独实体对象,所以日志条目将被保存(不会受到任何业务数据异常的影响).但如果我有一个DBContext对象,那么日志条目将无法保存,因为我无法保存业务数据..所以我的问题是如果启动2个DBContext对象一个用于日志而另一个用于业务数据是一个有效的方法跟随,或者是一个不好的决定?

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

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