标签: code-first

实体框架使用排序顺序加载子集合

我有两个表父表和子表.子表具有列排序顺序(数值).由于缺少EF的支持来持久化IList包含排序顺序而不暴露排序顺序(请参阅:实体框架持久化子集合排序顺序)我的子类还有一个属性SortOrder,因此我可以存储具有排序的子项订购.

与引用问题的autor相反,我尝试加载始终排序的子项.因此,如果我加载一个我期望的父实例,那么子集合按排序顺序排序.如何使用Code First Fluent API和POCO实现此行为?

提示:在子集合上调用.Sort(...)不是一个选项.

entity-framework poco code-first ef-code-first

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

将MySql与Entity Framework 4和Code-First Development CTP一起使用

我以为我会尝试使用Scott Guthrie 关于代码优先开发实体框架4 的最新帖子.而不是使用Sql Server,我正在尝试使用MySql.以下是我的web.config的相关部分(这是一个Asp.Net MVC 2应用程序):

<connectionStrings>
    <add name="NerdDinners"
         connectionString="Server=localhost; Database=NerdDinners; Uid=root; Pwd=;"
         providerName="MySql.Data.MySqlClient"/>
  </connectionStrings>
  <system.data>
    <DbProviderFactories>
      <add name="MySQL Data Provider" 
           invariant="MySql.Data.MySqlClient" 
           description=".Net Framework Data Provider for MySQL" 
           type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.2.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>
Run Code Online (Sandbox Code Playgroud)

就像教程一样,我希望EF4能够自动为我生成数据库.相反,它会抛出一个ProviderIncompatibleException,内部异常抱怨NerdDinners数据库不存在.

很公平; 我去为它创建了MySql数据库只是为了看看事情是否可行,而是获得了另一个ProviderIncompatibleException.这次,"提供商不支持DatabaseExists".

我承认,这是我第一次真正钻研实体框架(我主要坚持使用Linq to Sql),而这一切都是在上周才发布的Code-First CTP上运行的.那就是说,我在这里做错了什么,或者是一个可以解决的已知问题?

mysql asp.net-mvc ctp code-first entity-framework-4

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

使用Entity Framework 5 Code First将CreatedDate添加到实体

我正在尝试向CreatedDate我的模型中的实体添加属性,并且正在使用EF5 Code First.我希望这个日期一旦设置就不会改变,我希望它是一个UTC日期.我不想使用构造函数,因为我在模型中有许多实体要从包含该CreatedDate属性的抽象类继承,并且我不能使用接口强制构造函数.

我已经尝试了不同的数据注释和我试图写一个数据库初始化,将拿起一个特定的实体类型和写有一个ALTER约束getdate()正确的默认值table_namecolumn_name,但我一直没能正确地写代码.

请不要向我推荐AuditDbContext - 实体框架审计上下文EntityFramework.Extended工具,因为它们不能满足我的需要.

UPDATE

CreatedDate是空的SaveChanges()因为我将ViewModel传递给我的视图,它正确地没有调用其中的审计属性CreatedDate.即使我将模型传递给我的视图,我也不会CreatedDate在视图中编辑或存储它.

在这里读到我可以添加[DatabaseGenerated(DatabaseGeneratedOption.Identity)],这将告诉EF CreatedDate在插入和更新后正确存储,但不允许我的应用程序更改它:但我只是Cannot insert explicit value for identity column in table when IDENTITY_INSERT is set to OFF通过添加此属性得到错误.

我即将切换到EF Model First,因为这个简单的数据库要求在Code First中实现是荒谬的.

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

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

当我有一个实体时,动态地在DbContext中查找指定的通用DbSet

我有以下课程DbContext:

public class Order:BaseEntity
{
   public Number {get; set;}
}
Product:BaseEntity;
{
  public Name {get; set;} 
}

public class Context : DbContext
{
    ....
    public DbSet<Order> Orders { set; get; }
    public DbSet<Product> Products { set; get; }
    ....
}   
Run Code Online (Sandbox Code Playgroud)

我有一个想要添加到我的上下文的对象列表,但我不知道如何DbSet根据每个实体类型动态地找到合适的泛型.

IList<BaseEntity> list = new List<BaseEntity>();
Order o1 = new Order();
o1.Numner = "Ord1";
list.Add(o1);

Product p1 = new Product();
p1.Name = "Pencil";
list.Add(p1);

Context cntx = new Context();  
foreach (BaseEntity entity in list)
{
      cntx.Set<?>().Add(entity); …
Run Code Online (Sandbox Code Playgroud)

c# generics entity-framework code-first dbset

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

EF4 Code-First导致InvalidOperationException

我每次构建时都试图运行我的项目时遇到问题.似乎初始化程序运行,但是当涉及第一个查询时 - 它会死于以下内容InvalidOperationException.

This operation requires a connection to the 'master' database. Unable to create a
connection to the 'master' database because the original database connection has
been opened and credentials have been removed from the connection string. Supply
an unopened connection.
Run Code Online (Sandbox Code Playgroud)

作为参考,我使用的是直接导入NuGet的EF Code First CTP4.连接到SQL Server 2008 R2

我想要发生的是,如果有任何模型修改,则重新创建数据库,并为查找表提供一些值.这些东西似乎都支持*开箱即用.

我的设置是这样的:

Global.asax中

 protected void Application_Start()
 {
    Database.SetInitializer<CoreDB>(new CoreDBInitialiser());
    // et al...
 }
Run Code Online (Sandbox Code Playgroud)

CoreDB.cs

public class CoreDB : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Login> …
Run Code Online (Sandbox Code Playgroud)

c# database entity-framework code-first ef-code-first

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

实体框架CTP 4 - 代码优先自定义数据库初始化程序

我想实现一个自定义数据库初始化策略,以便我可以使用提供的用户ID和密码生成数据库模式并将其应用于EXISTING EMPTY SQL数据库.

不幸的是,内置策略没有提供我正在寻找的东西:

// The default strategy creates the DB only if it doesn't exist - but it does 
// exist so this does nothing
Database.SetInitializer(new CreateDatabaseOnlyIfNotExists<DataContext>());

// Drops and re-creates the database but then this breaks my security mapping and 
// only works if using a “Trusted" connection
Database.SetInitializer(new RecreateDatabaseIfModelChanges<DataContext>());

// Strategy for always recreating the DB every time the app is run. – no good for 
// what I want
Database.SetInitializer(new AlwaysRecreateDatabase<DataContext>());
Run Code Online (Sandbox Code Playgroud)

我已经解决了以下问题,但这不会创建ModelHash,因此我无法使用"context.Database.ModelMatchesDatabase()"来验证是否已创建数据库模式并阻止多次初始化:

public class …
Run Code Online (Sandbox Code Playgroud)

entity-framework code-first ctp4

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

在ASP.NET MVC 4 C#Code First中指定ON DELETE NO ACTION

如何在模型设计中指定ON DELETE NO ACTION外键约束?

目前,我有:

public class Status
{
    [Required]
    public int StatusId { get; set; }

    [Required]
    [DisplayName("Status")]
    public string Name { get; set; }
}

public class Restuarant
{
    public int RestaurantId { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    [EmailAddress]
    public string Email { get; set; }
    [Required]
    public string Telephone { get; set; }
    [Required]
    public int StatusId { get; set; }
    public List<Menu> Menus { get; set; }

    // NAVIGATION …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc entity-framework foreign-keys code-first

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

代码优先迁移和存储过程

我刚刚创建了一个数据库并完成了我的第一次迁移(只是一个简单的表添加).现在我想添加一些我刚刚添加的存储过程,通过编写sql并在Management Studio中执行它.但是我希望在迁移中包含这些存储过程,以便保存它们,并且我可以针对它们运行Up或Down方法.这是可能的,如果是这样,需要使用什么语法?或者我只需要使用Management Studio添加/编辑/删除它们?

sql-server asp.net-mvc entity-framework code-first

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

带有标识列的EF Code First Parent-Child插入

我有以下型号.

class Parent
{
    int ParentId (identity column) { get; set; }
    string ParentName { get; set; }
    virtual ICollection<Child> Children { get; set; }
}

class Child
{
    int ChildId (identity column) { get; set; }
    string ChildName { get; set; }
    int ParentID { get ; set; } //foreign key to Parent(ParentID)
}
Run Code Online (Sandbox Code Playgroud)

如何在单个事务中向父母和子女插入几行?基本上我想获得在父级上生成的标识(比如我在父级中插入一行)并插入具有该值的子行?如何使用Code First实现这一目标?

entity-framework code-first ef-code-first

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

首先了解实体框架代码中的ForeignKey属性

有关背景信息,请参阅以下帖子:

实体框架一到零或一个没有导航属性的关系

我一直认为这ForeignKey用于显示类中哪个属性持有确定导航属性的ForeignKey,例如

public class MemberDataSet
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public int? DeferredDataId { get; set; }
    [ForeignKey("DeferredDataId")]
    public virtual DeferredData DeferredData { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是,我在链接的帖子上发现这是不对的,因为DeferredData的主键被称为Id我实际需要:

public class MemberDataSet
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public int? DeferredDataId { get; set; }
    [ForeignKey("Id")]
    public virtual DeferredData DeferredData { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

ForeignKey用于指向其他类.

然后我继续改变其他一些参考文献:

public class MemberDataSet
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework foreign-keys code-first shared-primary-key

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