标签: entity-framework-5

NuGet包管理器控制台默认项目下拉列表为空

我最近从MSDN升级到Visual Studio 2012 RTM Ultimate.我正在使用EF Code First Migrations在我的应用程序中构建我的数据库,最近我添加了一个新实体,并希望为它进行迁移.

为此,您需要在VS中打开"包管理控制台"窗口,然后键入add-migration "some name here".这将自上次更新以来对数据库进行任何更改.


问题

VS 2012 RC上未发生此问题

我遇到的问题是,尽管我的解决方案中有多个项目,但未填充程序包管理器控制台中的"默认项目"下拉列表.我在上面输入命令时使用的默认项目是错误的项目(我的迁移在另一个项目中).我这样做时收到以下错误:

在程序集"ProjectA"中未找到任何迁移配置类型.(在Visual Studio中,您可以使用程序包管理器控制台中的"启用 - 迁移"命令添加迁移配置).

Visual Studio 2012程序包管理器控制台


我试过的

我已经尝试将正确的项目(ProjectB)设置为启动项目,只是为了得到这个错误:

无法加载程序集"ProjectA".(如果在Visual Studio中使用Code First Migrations,如果解决方案的startUp项目未引用包含迁移的项目,则可能会发生这种情况.您可以更改解决方案的startUp项目或使用-StartUpProjectName参数.)


问题

如何手动指定要添加的项目迁移,或强制"默认项目"下拉列表填充?

nuget ef-migrations entity-framework-5 visual-studio-2012

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

是Find和Where().FirstOrDefault()是等价的吗?

我已经使用了Find(id)与实体框架5.但是集合扩展方法,很多的例子我看到的使用Where(s => s.Id == 1),而我加入FirstOrDefault()来获取对象,而不是一个集合.这是一种风格差异,还是有明显的.Where()偏好的功能原因?

.net linq linq-to-entities entity-framework entity-framework-5

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

忽略TransactionScope以进行特定查询

我正在寻找一种在TransactionScope处于活动状态时执行查询的方法,并忽略TransactionScope - 基本上,我想执行此特定查询,无论如何.

我使用EF代码优先,以及应用程序的设计方式,一个新的数据上下文贯穿单个呼叫多次打开,每一个都有自己的变化,所有这些都包含在一个单一的TransactionScope,这已经内Complete()称为最后假设没有失败.在上下文中我们已经重写,SaveChanges以便如果发生任何异常base.SaveChanges(),我们可以捕获它并在回滚事务之前登录到数据库.

由于在SaveChanges事务内部发生,因此记录显然不会发生,因为它属于与原始调用相同的事务.我试图完全忽略TransactionScope的日志代码.

这是一些精简代码:

// From the context
public override int SaveChanges() {
    try {
        return base.SaveChanges();
    } catch (Exception ex) {

        // Writes to the log table - I want this to run no matter what
        LogRepo.Log(/*stuff to log from the context*/);

        throw;
    }
}

// Inside the business logic
public void DoSomething() {
    try {
        using (var scope = new TransactionScope()) {

            using (var context = new FooContext()) …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework transactions transactionscope entity-framework-5

26
推荐指数
1
解决办法
5831
查看次数

在将所有导航属性加载(懒惰或渴望)到内存之前对其进行过滤

对于未来的访问者:对于EF6,您可能最好使用过滤器,例如通过此项目:https://github.com/jbogard/EntityFramework.Filters

在我们正在构建的应用程序中,我们应用"软删除"模式,其中每个类都有一个'已删除'布尔.实际上,每个类都只是继承自这个基类:

public abstract class Entity
{
    public virtual int Id { get; set; }

    public virtual bool Deleted { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

举一个简短的例子,假设我有类GymMemberWorkout:

public class GymMember: Entity
{
    public string Name { get; set; }

    public virtual ICollection<Workout> Workouts { get; set; }
}

public class Workout: Entity
{
    public virtual DateTime Date { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我从数据库中获取健身房成员列表时,我可以确保没有获取任何"已删除"健身房成员,如下所示:

var gymMembers = context.GymMembers.Where(g => !g.Deleted);
Run Code Online (Sandbox Code Playgroud)

然而,当我遍历这些健身房成员时,他们Workouts从数据库加载而不考虑他们的Deleted旗帜.虽然我不能责怪实体框架没有理解这一点,但我想以某种方式配置或拦截延迟属性加载,以便永远不会加载已删除的导航属性.

我一直在考虑我的选择,但它们看起来很稀缺: …

c# soft-delete ef-code-first entity-framework-5

26
推荐指数
1
解决办法
5915
查看次数

如何为Entity Framework 5关闭复数表创建?

我正在尝试使用Entity Framework 5.第一个问题是EF自动创建表.我尝试通过包括修复它 dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>().第二个问题是像这样的错误

自创建数据库以来,支持"CountryContext"上下文的模型已更改.考虑使用Code First Migrations来更新数据库.

我尝试修复它,dbModelBuilder.Conventions.Remove<IncludeMetadataConvention>();但没有意义.下一个数据访问层:

Table(Name = "tblCountries")]
public class Country
{
     [Column(Name = "id", IsDbGenerated = true, IsPrimaryKey = true)]
    public int Id {get;set;}

    [Column(Name = "name")]
    public string Name {get;set;}
}

public class CountryContext:DbContext
{
    public CountryContext(string connStr):base(connStr)
    {
    }

    public DbSet<Country> TblCountries { get; set; }

    protected override void OnModelCreating(DbModelBuilder dbModelBuilder)
    {
        dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        dbModelBuilder.Conventions.Remove<IncludeMetadataConvention>();
    }
}

    public class CountryDal:BaseDal
{
   public int CheckIsExist(Country country)
    {
        int id = 0;
        using (var …
Run Code Online (Sandbox Code Playgroud)

c# pluralize entity-framework-5

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

枚举作为实体框架中的关键5在多对多联接中抛出错误

好吧,这有点冗长/模糊,但我在特定情况下得到一个奇怪的错误,我使用Enum作为表键并尝试查询表,同时包含多个多对多相关实体.

以下示例代码中的错误是:

The type of the key field 'DietIs' is expected to be 'MvcApplication8.Models.DietIs', but the value provided is actually of type 'System.Int32'.
Run Code Online (Sandbox Code Playgroud)

在.net 4.5 Web项目中,我有以下实体配置:

public enum DietIs {
    None,
    Kosher,
    Paleo,
    Vegetarian
}

public class Diet {

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public DietIs DietIs { get; set; }

    public string Description { get; set; }
    public virtual ICollection<Recipe> Recipes { get; set; }
    public virtual ICollection<Menu> Menus { get; set; }
}

public class Recipe {
    public int Id { …
Run Code Online (Sandbox Code Playgroud)

.net enums entity-framework .net-4.5 entity-framework-5

25
推荐指数
1
解决办法
2517
查看次数

EntityType'DbGeography'没有定义键

长时间听众,第一次来电(最后在这里开了帐户!)......

我正在使用Visual Studio 2013.NET 4.5.1实体框架6(最终版本,而不是RC或beta).

尝试向我的实体添加DbGeography属性时,执行时出现此错误:

    One or more validation errors were detected during model generation:
    Geocoder.DbGeography: : EntityType 'DbGeography' has no key defined.
    Define the key for this EntityType.
    DbGeographies: EntityType: EntitySet 'DbGeographies' is based on type 'DbGeography' that has no keys defined.
Run Code Online (Sandbox Code Playgroud)

我已经确认我没有引用旧版本的Entity Framework(这里讨论).我一直在使用这篇文章这篇MSDN文章中的示例/信息,因为这是我第一次涉及.NET中的空间类型(以及SQL Server,就此而言).

这是我的实体:

public class Location
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string …
Run Code Online (Sandbox Code Playgroud)

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

25
推荐指数
1
解决办法
5410
查看次数

Tinyint(字节),SmallInt(Int16)与EF5中的Enum不兼容

使用Database first设计并使用tinyint(或smallint)列:

[MyEnumColumn] [tinyint] NOT NULL
Run Code Online (Sandbox Code Playgroud)

我在EDM中将此列映射到枚举类型

External Type: NSpace.MyEnumType
Name:MyEnumType
UnderlyingType:Byte
Run Code Online (Sandbox Code Playgroud)

NSpace.MyEnumType的定义如下:

public enum MyEnumType 
{ One, Two, Three, All }
Run Code Online (Sandbox Code Playgroud)

仅在尝试从上下文加载实体时出现此错误:

指定的架构无效.错误:

对于概念类型"EntityDataModel.MyEnumType",找不到对应的对象层类型.

以下信息可能有助于解决以前的错误:

CLR枚举类型的基础类型与EDM枚举类型的基础类型不匹配.

如果我使用[Smallint]和[Int16]同样适用,但是一旦我将数据库更改为[Int]并将枚举类型更改为[Int32],错误就消失了.

当99.9%的时间内的枚举不超过256个项目或者我错过了其他内容时,为什么我需要将枚举值存储在4Byte(Int)数据字段而不是1Byte(Tinyint)中?

sqldatatypes entity-framework-5

24
推荐指数
1
解决办法
8821
查看次数

自动化EF-Migrations"Update-Database -Script"

我正在使用EF迁移来跟踪对EF代码优先数据库模型的更改.现在我需要为每次迁移生成一个SQL脚本,以便我可以将这组脚本传递给DBA.

我能够生成SQL脚本 Update-Database -Script ...

但是,我想自动化这个.我希望-Script开关接受一个指定SQL编写位置的参数,但事实并非如此.此外,输出重定向不起作用,因为SQL脚本不会写入STDOUT,而是写入临时文件.我认为无法从脚本中获取该临时文件.

任何想法如何自动化迁移 - > SQL脚本生成?也许有一些我不知道的神奇的PowerShell技巧?

编辑:顺便说一句,使用migrate.exe或任何其他"迁移感知"方法不是一个选项,交付SQL脚本是必须的.

c# powershell entity-framework ef-migrations entity-framework-5

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

使用实体框架加载所有子实体

我有这样的数据模型

数据模型

我想将对帐中的所有相关实体加载到Reconciliation对象中.

目前,我可以找到将所有相关的entites加载到单个Recon的唯一方法是多个列表.但我想加载一个Reconciliation对象中的每个相关实体.如果可能的话,优雅的方式.

Reconciliation recon = db.Reconciliations
  .Where(r => r.ReconNum == 382485).First();

List<ReconciliationDetail> reconDetails = recon.ReconciliationDetails.ToList();
List<JrnlEntryDetail> jrnlDetails = reconDetails.Select(r => r.JrnlEntryDetail).ToList();
List<JrnlEntry> jrnl = jrnlDetails.Select(j => j.JrnlEntry).ToList();

List<ARInvoice> invoices = jrnl.SelectMany(j => j.ARInvoices).ToList();
List<ARInvoiceDetail> invoicesDetail = invoices
  .SelectMany(i => i.ARInvoiceDetails).ToList();

List<ARCredMemo> credmemos = jrnl.SelectMany(j => j.ARCredMemoes).ToList();
List<ARCredMemoDetail> credmemosDetail = credmemos
  .SelectMany(c => c.ARCredMemoDetails).ToList();

List<IncomingPay> incomingPays = jrnl.SelectMany(j => j.IncomingPays).ToList();
List<IncomingPayDetail> incomingPaysDetail = incomingPays
  .SelectMany(i => i.IncomingPayDetails).ToList();

// ... and so on for outgoing pays, AP …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework-5

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