我正在我的项目中实施代码优先迁移,并且不想一直在包管理器控制台中使用 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 以启用自动迁移。
我正在使用Entity Framework 5 code first. 我的表有一个名为的列Active,它的数据类型是类型int。存储在 Active 中的值为0、1和null。
我有一个类需要映射到这个表。
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
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 …
我有一个用实体框架映射的数据库,
我需要实现一个通用方法来根据我传递的参数获取项目列表:
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
我正在 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”。
顺便说一句,我可以成功连接到所有没有空格的列。谢谢你的帮助!
我刚刚在几个星期前开始了一个新项目并决定尝试使用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) 我有一个数据库已经充满了包含数据的表.我所看到的是所有表共有5列:
现在,有一些常见的操作是基于当前在任何地方复制的那些字段完成的
我想要的是创建一个基类,它只包含这些公共属性和为它们完成的方法,并使每个其他实体派生自此.
我不需要或者想要在数据库本身上拥有这个基本实体,这只是我想帮助编码部分的东西.
问题是这是数据库第一,我不能改变数据库所以我必须使用的是POCO类和EDMX.
我怎样才能实现这一目标?
.net c# entity-framework ef-database-first entity-framework-5
使用带有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 …
跟进此问题/答案
如何使实体框架数据上下文只读
解决方案是使您的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是更好的选择。谢谢你的耐心!
我正在研究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对象,原因如下: -
c# ×6
.net ×2
ado.net ×2
datacontext ×1
dbcontext ×1
dynamic-data ×1
entity-framework-migrations ×1
nhibernate ×1
wcf ×1
web-config ×1