标签: code-first

实体框架4 Code-First多对多插入

我正在为数据库层使用代码优先模式.

我有两个POCO课程:

public class Order
{
    [Key]
    public int OrderId { get; set; }
    public virtual ICollection<Item> Items { get; set; }
    // other fields
}
Run Code Online (Sandbox Code Playgroud)

public class Item
{
    [Key]
    public int ItemId { get; set; }
    public virtual ICollection<Order> Orders { get; set; }
    // other fields
}
Run Code Online (Sandbox Code Playgroud)

然后我有数据上下文类:

public class DataContext : DbContext
{
    public DbSet<Item> Items { get; set; }
    public DbSet<Order> Orders { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有一个"存储库"类:

public class OrderRepository
{
    private DataContext …
Run Code Online (Sandbox Code Playgroud)

c# many-to-many entity-framework code-first entity-framework-4

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

如何创建一个包含外键的复合键,代码优先?

我首先使用EF4代码,并希望生成一个由类属性和外键组成的复合键.我有两个班:订单和公司.Order类包含引用,但这在公司之间不一定是唯一的.所以我打算使用由Reference和Company.CompanyId组成的复合键.

我已尝试使用以下设置它但我收到错误消息"键表达式无效".

modelBuilder.Entity<Order>().HasKey(o => new { o.Reference, o.Company.CompanyId });
Run Code Online (Sandbox Code Playgroud)

我也试过了

modelBuilder.Entity<Order>().HasKey(o => new { o.Reference, o.Company });
Run Code Online (Sandbox Code Playgroud)

这失败了.

这些是我的课程:

public class Order
{
   public string Reference { get; set; }
   public Company Company { get; set; }
}

public class Company
{
   public int CompanyId { get; set; }
   public virtual ICollection Orders { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

code-first entity-framework-4 ef4-code-only ef-code-first

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

EF4 Code First,TDD,CRUD和Transactions

在过去,我在创建看起来像这样的数据访问/存储库代码时,已经为简单的CRUD操作编写了单元测试:

using(var connection = new WhateverConnection(connectionString))
{
    connection.Open();
    using(var transaction = connection.BeginTransaction())
    {
        try
        {
            //test the CRUD operation
        }
        finally
        {
            //gets rid of any stuff created during the test
            transaction.Rollback();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

今天我正在搞乱EF4 Code First,我意识到我不知道这个测试场景如何在Entity Framework词典中进行翻译.似乎,如果我打电话DbContext.SaveChanges(),它会保存提交,无论是否AcceptAllChanges()被调用.即使使用ObjectContext而不是DbContext,我也无法弄清楚如何在不手动清理创建的任何模拟/测试对象的情况下重新创建这个简单的测试场景.我在MSDN上读过这篇文章,但TransactionScope也没有真正的Rollback类型方法.我是否使用TransactionScope而且从不打电话Complete?是否有其他方法或方式使用DbContext和/或ObjectContext以便在单元测试期间回滚?我是否需要使用EF4 Code First完全重新调整我对TDD的思考?

tdd transactions code-first entity-framework-4

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

实体框架代码首先,外键/对象不应该保存

我有三个课程,如下:

[DataContract]
public class ApplicationDto : BusinessBase<int>
{
    /// <summary>
    /// Gets or sets the name.
    /// </summary>
    /// <value>The name.</value>
    [DataMember]
    public string Name { get; set; }

    /// <summary>
    /// Gets or sets the description.
    /// </summary>
    /// <value>The description.</value>
    [DataMember]
    public string Description { get; set; }

    /// <summary>
    /// Gets or sets the development startdate.
    /// </summary>
    /// <value>The development startdate.</value>
    [DataMember]
    public DateTime DevelopmentStartdate { get; set; }

    /// <summary>
    /// Gets or sets the …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework code-first

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

asp.net mvc 3在模型上运行验证

如何在模型上运行所有DataAnnotation验证?

我正在从代码构建一个模型实例,我没有没有模型状态绑定或任何东西.我只想对它进行所有验证......我正在使用EF CodeFirst.

public class Category
{
    public int Id { get; set; }

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

cat = new Category();
if (cat.IsValid()) { /* blah */ } // i want something like this
Run Code Online (Sandbox Code Playgroud)

我知道这可能是一个愚蠢的问题,但我似乎无法在任何地方找到答案..

validation model code-first data-annotations asp.net-mvc-3

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

代码优先:由判别者查询.我知道,我不应该这样做

我创建了TPH代码优先tmodel并在所需的鉴别器列上添加了NotMappedAttribute.我可以将DbSets添加到我的上下文中,用于子类和查询这些类型的集合,代码优先仍然是我的朋友.

但是,假设我有一个实体,它本身包含一个BaseType集合,其中一些可能是一种类型,另一种类型.如何编写查询以获取键入的记录?顺便说一下,我不希望在延迟加载的内存集合中使用它.

假设一个名为Association的类和一些子类AssocA和AssocB,它们都映射到Associations表并在AssocationTypeId上进行区分.现在假设你有一个实体 - 为了论证而称之为Employee.所以举个例子

class Employee
{
  public virtual Collection<Associations> MyAssociations {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

现在我想查询数据库以查找AssocA =?的员工.我不希望任何关联等于?但特定类型的关联.我无法使用GetType,因为LinqToEntities无法使用它.我不能使用AttributeTypeId,因为它在代码中首先使用了映射.

我错过了什么?我在做什么是合理的.但我不能模仿它.

entity-framework code-first discriminator

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

实体框架代码首先迁移到多个数据库

假设我们有Web应用程序的体系结构模型,其中每个帐户有1个数据库.这些帐户的数据库结构相同,仅与in中的数据不同.如何在代码优先模型中配置迁移.

entity-framework code-first ef-code-first ef-migrations entity-framework-6

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

Code First迁移更新localdb上的错误Db

我正在使用代码优先迁移来为我的asp mvc站点创建和更新数据库.

我有一个DbContext,它位于解决方案的另一个项目中.

public class EFDbContext : DbContext
{
    public DbSet<Book> Books { get; set; }
    public DbSet<Author> Authors { get; set; }
    public DbSet<Publisher> Publishers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我启用迁移和添加迁移[名称]时.它似乎创建了自己的db

[foo-projectname].Domain.Concrete.EFDbContext
Run Code Online (Sandbox Code Playgroud)

而不是附加到我创建的数据库,称为[foo-projectname].在站点的webconfig中,连接字符串通过目录" [foo-projectname] " 引用.

如果我将webconfig更改为其他数据库,那么我将从已添加到该数据库的项目中获取结果.但是,我想使用我创建的数据库.

我不想坚持使用这个自动创建的原因是因为我不确定迁移到SqlServer并且不想再陷入困境.我也得到了错误

支持'EFDbContext'上下文的模型自...以来发生了变化

即使我没有改变任何东西.

entity-framework code-first ef-code-first ef-migrations

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

如何使用复合主键为表创建复合外键

我有两个复合主键表:

public class Event
{
    [Key]
    [Column(Order = 1)]
    public string ID1 { get; set; }

    [Key]
    [Column(Order = 2)]
    public int ID2 { get; set; }
    public DateTime EventDate { get; set; }
    public string DocID1 { get; set; }
    public int DocID2 { get; set; }
Run Code Online (Sandbox Code Playgroud)

}

public class EventDocument
{
    [Key]
    [Column(Order = 1)]
    public string ID1 { get; set; }
    [Key]
    [Column(Order = 2)]
    public int ID2 { get; set; }

    public string Name { get; …
Run Code Online (Sandbox Code Playgroud)

foreign-keys code-first entity-framework-6

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

类库,实体框架代码优先和Microsoft.SqlServer.Types

我有一些问题试图获得代码优先的Entity Framework 6.0来构建迁移Microsoft.SQLServer.Types.我还是继续说:

空间类型和函数不适用于此提供程序,因为无法找到程序集"Microsoft.SqlServer.Types"版本10或更高版本.

我看到他们一直在谈论跑步:

SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
Run Code Online (Sandbox Code Playgroud)

或类似的global.asax.我需要在一个处理我的应用程序的数据层的类库中运行它,因此没有启动事件.

我投入了

[assembly: PreApplicationStartMethod(typeof(Test.Startup), "Start")]
namespace Test
{
    public class Startup
    {
        public static void Start()
        { 
             SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但这没有任何效果.有人有任何其他想法吗?

谢谢

克里斯

c# sql-server entity-framework class-library code-first

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