标签: entity-framework-5

实体框架5期望来自MigrationHistory表的CreatedOn列

我正在将MVC 3应用程序从EF 4.3迁移到EF 5.我注意到EF 5需要表CreatedOn中的__MigrationHistory列,由于迁移是由旧版本创建的,因此该列不存在.

SELECT TOP (1) 
[c].[CreatedOn] AS [CreatedOn]
FROM [dbo].[__MigrationHistory] AS [c]
Run Code Online (Sandbox Code Playgroud)

如何在不擦除迁移历史记录的情况下解决此问题?我正在考虑一个查询来从迁移名称推断列的值,其格式如下:

201203111201542_MigrationName
Run Code Online (Sandbox Code Playgroud)

entity-framework entity-framework-5

20
推荐指数
4
解决办法
5816
查看次数

ASP.NET MVC电子商务解决方案(商业或开源)

好的,我们有一个利用以下内容的开发基础架构:1.MVC 4(Razor视图)2.实体框架5代码优先3. Ninject

我正在寻找的是与我们现有基础设施尽可能接近的电子商务解决方案,希望尽可能无缝地集成.

我看了很多很多选项,包括:1.NopCommerce 2. Magelia 3. dashCommerce 4. DotShoppingcart

到目前为止,NopCommerce和Magelia(尤其是NopCommerce)似乎是我能找到的最接近的.我正在寻找可能更好地与我们上面提到的现有基础设施集成的其他电子商务解决方案的建议.成本确实不是问题,因此它可以是开源的或商业的.

欢迎任何和所有建议.

谢谢

缺口

ninject e-commerce asp.net-mvc-4 entity-framework-5

20
推荐指数
1
解决办法
7129
查看次数

实体框架代码第一次迁移:设置主键值

我有一个表,为表的某些行存储一些额外的数据,如:

public class QuoteExtra
{
    [Key]
    public int QuoteId { get; set; }
    // More fields here
}
Run Code Online (Sandbox Code Playgroud)

我希望能够在这个表中添加行,我明确地设置了PK.

如果我只是如上所述,设置值并提交行会导致该值被丢弃并替换为数据库中自动生成的值(并且该列在实际模式中定义为Identity列).

这似乎是正确的解决方案:

public class QuoteExtra
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int QuoteId { get; set; }
    // More fields here
}
Run Code Online (Sandbox Code Playgroud)

然而,这反而让我成为例外:

当IDENTITY_INSERT设置为OFF时,无法在表'EnumTest'中为标识列插入显式值.

那么,我如何编写我的类,以便我能够在EF中设置主键的值?

编辑:

我尝试添加以下基于代码的迁移将IDENTITY_INSERT设置为ON:

public override void Up()
{
    Sql("SET IDENTITY_INSERT QuoteExtra ON");
}
Run Code Online (Sandbox Code Playgroud)

我跑了它并再次尝试,但得到了与上面相同的例外.奇怪的是,数据库确实反映了这个设置,并且直接运行SQL确实允许我为主键插入任意值 - 因此看起来实体框架本身正在执行此规则,而忽略了识别IDENTITY_INSERT不在事实定下来了.我需要在EF本身设置它吗?

编辑2:

我误解了IDENTITY_INSERT; 我假设将它设置为无限期地保留在该表中.实际上它只要"会话"就可以存在,这意味着例如在迁移中设置它意味着它只存在......只要迁移运行,并且与我以后的.Add()之后的未来连接没有关系. ,这解释了为什么我仍然有这个例外 - 数据库确实是异常的来源,而不是EF.由于IDENTITY_INSERT每个会话最多限制一个表,因此这是一种相当低效的方法 - 首先不创建Identity PK列似乎是一个更好的路径.

primary-key ef-code-first ef-migrations entity-framework-5

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

实体框架 - 当前命令超时值是什么

我正在使用Entity Framework 5,我希望知道命令超时值.

为此,我将dbContext对象转换为ObjectContext,然后访问CommandTimeout属性.

int ? currentCommandTimeout = ((IObjectContextAdapter)dbContext).ObjectContext.CommandTimeout;
Run Code Online (Sandbox Code Playgroud)

此属性的当前值为null,这意味着当前命令超时是基础提供程序的默认值.

  1. 谁是底层提供者?
  2. 在这种情况下,如何读取(通过EF代码)当前命令超时值?

MSDN ObjectContext CommandTimeout属性参考

编辑:感谢您解释如何设置命令超时并在文档中查找默认命令超时值.但问题仍未解决.如果可能,如何在默认情况下通过EF读取命令超时值.

c# entity-framework entity-framework-5

20
推荐指数
4
解决办法
4万
查看次数

在实体框架中我想只包括第一个子对象而不包括子对象(sub子)

我有这两个类:

public class BusinessesTBL
{
    public string ID { get; set; }
    public string FirstName { get; set; }
    public string lastName { get; set; }

    public ICollection<OffersTBL> OffersTBLs { get; set; }
}

public class OffersTBL 
{
    public int ID { get; set; }
    public string Name { get; set; }

    public int CatId { get; set; }

    public string BusinessesTBLID { get; set; }
    public virtual BusinessesTBL BusinessesTBLs { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试根据CatId字段提供所有优惠时,我还需要返回BusinessesTBLs,但该方法还会根据每个BusinessesTBL obj返回优惠,我的代码是:

public IQueryable<OffersTBL> GetOffersTBLsCat(int …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc linq-to-entities entity-framework entity-framework-4 entity-framework-5

20
推荐指数
2
解决办法
2813
查看次数

Entity Framework 5是否支持唯一约束?

想知道Entity Framework 5是否支持对实体属性的唯一约束?如果是这样,我如何指定属性应该是唯一的?

unique-constraint .net-4.5 entity-framework-5

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

Lambda表达式"IN"运算符是否存在?

我正在寻找像下面这样构建Lambda表达式

IQueryable<Object> queryEntity = 
                _db.Projects.Where(Project=>Project.Id.IN(1,2,3,4));
Run Code Online (Sandbox Code Playgroud)

我没有IN在Lambda表达式中找到任何运算符.

有人有建议吗?

c# lambda c#-4.0 entity-framework-5

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

实体框架代码迁移 - 陷入初始迁移

我已经通过Nuget将EF 5添加到我的项目中,并使用"Enable-Migrations"命令启用了迁移.然后我调用"Add-Migration"来生成用于生成模式的基本代码.

然后我向我的一个域对象添加了一个属性(名为"TestProperty"的字符串属性)并添加了一个映射到我的EntityTypeConfiguration文件(我们暂时忽略了这些约定).

再次调用"Add-Migration"会产生错误:

Unable to generate an explicit migration because the following explicit migrations are pending: [201303262144218_Initial]. Apply the pending explicit migrations before attempting to generate a new explicit migration.
Run Code Online (Sandbox Code Playgroud)

但是调用"Update-Database"会产生一个sql异常,因为这些表已经存在:

There is already an object named 'Customer' in the database
Run Code Online (Sandbox Code Playgroud)

在我的DbContext的构造函数中,我尝试了不同的更新策略,例如:

Database.SetInitializer<UnitOfWork>(new DropCreateDatabaseAlways<UnitOfWork>());
Run Code Online (Sandbox Code Playgroud)

我错过了一些明显的东西吗 我在这里尝试了解决方案,但它不起作用:ASP.NET的自动迁移

谢谢

编辑:更新完成第一步的关键是创建初始迁移,然后从Up和Down方法中删除生成的代码(http://thedatafarm.com/blog/data-access/using-ef-migrations- with-an-existing-database /).

然后,我可以更新模型和EF映射,然后运行Add-Migration.这会使用正确的Up和Down代码生成迁移.

然后问题是尝试应用更新.Update-Database产生错误"无法更新数据库以匹配当前模型,因为存在挂起的更改并禁用自动迁移...自动迁移.将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移.您可以使用Add-Migration命令将挂起的模型更改写入基于代码的迁移".好的,所以我再次尝试添加迁移,它会生成另一个迁移,其代码与最后一个完全相同.

我运行Update-Database并再次获得相同的错误.我尝试"Update-Database -TargetMigration 201304080859556_MyMigration -Force",但这会产生"指定的目标迁移'201304080859556_MyMigration'不存在.确保目标迁移是指现有的迁移ID" - 确实如此!

很沮丧!

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

19
推荐指数
3
解决办法
3万
查看次数

EF 5."未应用自动迁移,因为它会导致数据丢失" - 仅更改了列名称

我有:

AutomaticMigrationsEnabled = True
AutomaticMigrationDataLossAllowed = False
Run Code Online (Sandbox Code Playgroud)

在我的配置文件中,现有的模型是:

Public Property ID() As Integer
Public Property ERP_ArticleCode() As String
Public Property description() As String
Run Code Online (Sandbox Code Playgroud)

我所做的只是将第3列从"description"更改为"am_description"并运行"update-database -verbose",这导致"未应用自动迁移,因为它会导致数据丢失"!

我不明白这一点......为什么我不能只更改列名并更新数据库 - 这应该不是数据存储问题,是吗?难道我做错了什么?

entity-framework ef-migrations entity-framework-5

19
推荐指数
2
解决办法
3万
查看次数

重命名ASP.NET标识表时重复外键

我按照这个问题中的建议重命名我的ASP.NET标识表:

modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaim");
modelBuilder.Entity<IdentityUserRole>().ToTable("UserRole");
modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogin");
modelBuilder.Entity<IdentityRole>().ToTable("Role");
modelBuilder.Entity<IdentityUser>().ToTable("User");
modelBuilder.Entity<ApplicationUser>().ToTable("User");
Run Code Online (Sandbox Code Playgroud)

但是,这会导致UserClaim与User关系的两个属性 - UserId以及IdentityUser_Id:

在此输入图像描述

有什么办法可以解决这个问题吗?

c# sql asp.net-mvc entity-framework-5 asp.net-identity

19
推荐指数
1
解决办法
2767
查看次数