标签: ef-code-first

如何使用Entity Framework Code First Fluent API指定表名

我有一个实体,我将配置实体框架将其映射到具有不同名称的数据库表.

我可以使用Code First DataAnnotations(DataAnnotations.Schema.TableAttribute)轻松完成此操作.

但由于现在的限制,我必须使用Code First Fluent API(我的域对象将由外部客户端使用,因此它们不应该是特定于技术的 - 例如,对DataAnnotations有任何引用)

我在MSDN上搜索但没有发现任何内容.那有可能吗?怎么样?

谢谢.

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

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

使用Entity Framework Fluent API的一对一可选关系

我们希望使用Entity Framework Code First使用一对一的可选关系.我们有两个实体.

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

    public int? LoyaltyUserDetailId { get; set; }
    public LoyaltyUserDetail LoyaltyUserDetail { get; set; }
}

public class LoyaltyUserDetail
{
    public int Id { get; set; }
    public double? AvailablePoints { get; set; }

    public int PIIUserId { get; set; }
    public PIIUser PIIUser { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

PIIUser可能有LoyaltyUserDetailLoyaltyUserDetail必须有PIIUser.我们尝试了这些流畅的方法技巧.

modelBuilder.Entity<PIIUser>()
            .HasOptional(t => t.LoyaltyUserDetail)
            .WithOptionalPrincipal(t => t.PIIUser)
            .WillCascadeOnDelete(true);
Run Code Online (Sandbox Code Playgroud)

这种方法没有 …

c# entity-framework one-to-one ef-code-first ef-fluent-api

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

EF Code First中的计算列

我需要在我的数据库中有一列由数据库计算为(行数之和) - (行数b).我正在使用代码优先模型来创建我的数据库.

这就是我的意思:

public class Income {
      [Key]
      public int UserID { get; set; }
      public double inSum { get; set; }
}

public class Outcome {
      [Key]
      public int UserID { get; set; }
      public double outSum { get; set; }
}

public class FirstTable {
      [Key]
      public int UserID { get; set; }
      public double Sum { get; set; } 
      // This needs to be calculated by DB as 
      // ( Select sum(inSum) FROM Income WHERE UserID …
Run Code Online (Sandbox Code Playgroud)

c# sql-server calculated-columns ef-code-first entity-framework-5

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

如何从头开始删除和重新创建现有的EF Code First数据库

我在VS 2012中使用EF Code First和EF 5.我使用PM update-database命令,我有一个简单的种子方法来填充一些带有样本数据的表.

我想删除并重新创建我的x.mdb.更新历史记录似乎不同步.如果我在我的上下文中注释掉我的所有DBS,update-database运行时没有错误,但在DB中留下了一些表.由于我在数据库中没有有价值的数据,因此最简单的方法是重置所有内容.

我怎么能做到这一点?

ef-code-first ef-migrations

70
推荐指数
7
解决办法
8万
查看次数

EF:使用延迟加载的必需属性时,验证失败

鉴于这个非常简单的模型:

public class MyContext : BaseContext
{
    public DbSet<Foo> Foos { get; set; }
    public DbSet<Bar> Bars { get; set; }
}

public class Foo
{
    public int Id { get; set; }
    public int Data { get; set; }
    [Required]
    public virtual Bar Bar { get; set; }
}

public class Bar
{
    public int Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

以下程序失败:

object id;
using (var context = new MyContext())
{
    var foo = new Foo { Bar = …
Run Code Online (Sandbox Code Playgroud)

entity-framework ef-code-first

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

我应该使用实体框架4.1和MVC3启用还是禁用动态代理?

有人可以提供一些建议或指出一些可以帮助做出这个决定的博客/文章吗?代理对我来说似乎很陌生,我对使用它们犹豫不决.我喜欢通过在我的模型中使用虚拟属性来控制延迟加载的能力,但这几乎是我能看到的所有好处.我的应用程序是一个简单的MVC Web应用程序,当实体遇到更改状态时,我不需要将任何挂钩连接到上下文中.

无论如何,这是我现在非常有限的利弊列表,让我知道如果我没有任何这个.

优点

  • 在"保存"或"更新"中,我与"Apply'Changes"无缝对接
  • 延迟加载配置非常简单.

缺点

  • 从来没有为我的实体使用代理,这是一种方法的改变,对我自己和团队成员来说似乎不舒服.
  • 调试很尴尬.
  • 如果我想要序列化/反序列化,则需要额外的代码
  • 在"保存"或"更新"时,代理必须是从上下文中检索的同一对象.

orm entity-framework dynamic-proxy ef-code-first entity-framework-4.1

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

EF Code First:如何获取随机行

如何构建一个查询随机行的查询?

如果我在SQL中编写它,那么我会在newid()上输入一个命令并从顶部删除n行.无论如何要先在EF代码中执行此操作?

我尝试创建一个使用newid()并使用DbSet.SqlQuery()执行它的查询.虽然它有效,但它不是最干净的解决方案.

此外,尝试检索所有行并通过新guid对它们进行排序.尽管行数相当小,但它仍然不是一个好的解决方案.

有任何想法吗?

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

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

EF包含其他实体(通用存储库模式)

我在Entity Framework Code First上使用Generic Repository模式.一切都工作正常,直到我需要在查询中包含更多实体.我成功地包含了一个实体,但现在我无法弄清楚如何包含多个实体.看看到目前为止我得到了什么:

public IQueryable<TEntity> GetQuery<TEntity>() where TEntity : class
{
    var entityName = GetEntityName<TEntity>();
    return _objectContext.CreateQuery<TEntity>(entityName);
}

public IList<TEntity> GetQueryWithInclude<TEntity>(string toInclude) where TEntity : class
{
    var entityName = GetEntityName<TEntity>();
    return _objectContext.CreateQuery<TEntity>(entityName).Include(toInclude).ToList();
}

private string GetEntityName<TEntity>() where TEntity : class
{
    return string.Format("{0}.{1}", _objectContext.DefaultContainerName, _pluralizer.Pluralize(typeof(TEntity).Name));
}
Run Code Online (Sandbox Code Playgroud)

我尝试但没有工作的是将一个字符串数组传递给一个函数,然后尝试在查询之上"追加"包含.我在想,如果我叫GetQueryWithInclude并在同一时间聚集查询的结果通过了实体名称(实际导航性能),但我担心这可能会重复在每次调用查询的结果...您认为最好的方法是什么?

提前致谢!

更新:

这是我想要实现的一个例子:

public IQueryable GetQueryWithIncludes(string[] otherEntities)
{
    var entityName = GetEntityName<TEntity>();
    //now loop over the otherEntities array 
    //and append Include extensions to the query
    //so inside the loop, something …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework repository-pattern entity-framework-4 ef-code-first

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

EF Code First没有导航属性的外键

假设我有以下实体:

public class Parent
{
    public int Id { get; set; }
}
public class Child
{
    public int Id { get; set; }
    public int ParentId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

什么是代码第一个流畅的API语法来强制在数据库中使用Parent表的外键约束创建ParentId,而不需要具有导航属性

我知道如果我将一个导航属性Parent添加到Child,那么我可以这样做:

modelBuilder.Entity<Child>()
    .HasRequired<Parent>(c => c.Parent)
    .WithMany()
    .HasForeignKey(c => c.ParentId);
Run Code Online (Sandbox Code Playgroud)

但我不希望在这种特殊情况下使用导航属性.

entity-framework ef-code-first

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

实体框架存储过程表值参数

我正在尝试调用接受表值参数的存储过程.我知道实体框架中没有直接支持这个,但据我所知,你可以使用ExecuteStoreQuery命令off来实现ObjectContext.我有一个通用的实体框架存储库,我有以下ExecuteStoredProcedure方法:

public IEnumerable<T> ExecuteStoredProcedure<T>(string procedureName, params object[] parameters)
{
    StringBuilder command = new StringBuilder();
    command.Append("EXEC ");
    command.Append(procedureName);
    command.Append(" ");

    // Add a placeholder for each parameter passed in
    for (int i = 0; i < parameters.Length; i++)
    {
        if (i > 0)
            command.Append(",");

        command.Append("{" + i + "}");
    }

    return this.context.ExecuteStoreQuery<T>(command.ToString(), parameters);
}
Run Code Online (Sandbox Code Playgroud)

命令字符串最终如下:

EXEC someStoredProcedureName {0},{1},{2},{3},{4},{5},{6},{7}
Run Code Online (Sandbox Code Playgroud)

我试图在接受表值参数的存储过程上运行此方法,并且它会中断.我在这里读到需要的类型SqlParameter参数和表值参数需要SqlDbType设置为Structured.所以我这样做了,我得到一个错误说明:

The table type parameter p6 must have a …
Run Code Online (Sandbox Code Playgroud)

c# stored-procedures entity-framework table-valued-parameters ef-code-first

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