我有一个实体,我将配置实体框架将其映射到具有不同名称的数据库表.
我可以使用Code First DataAnnotations(DataAnnotations.Schema.TableAttribute)轻松完成此操作.
但由于现在的限制,我必须使用Code First Fluent API(我的域对象将由外部客户端使用,因此它们不应该是特定于技术的 - 例如,对DataAnnotations有任何引用)
我在MSDN上搜索但没有发现任何内容.那有可能吗?怎么样?
谢谢.
我们希望使用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可能有LoyaltyUserDetail但LoyaltyUserDetail必须有PIIUser.我们尝试了这些流畅的方法技巧.
modelBuilder.Entity<PIIUser>()
.HasOptional(t => t.LoyaltyUserDetail)
.WithOptionalPrincipal(t => t.PIIUser)
.WillCascadeOnDelete(true);
Run Code Online (Sandbox Code Playgroud)
这种方法没有 …
我需要在我的数据库中有一列由数据库计算为(行数之和) - (行数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
我在VS 2012中使用EF Code First和EF 5.我使用PM update-database命令,我有一个简单的种子方法来填充一些带有样本数据的表.
我想删除并重新创建我的x.mdb.更新历史记录似乎不同步.如果我在我的上下文中注释掉我的所有DBS,update-database运行时没有错误,但在DB中留下了一些表.由于我在数据库中没有有价值的数据,因此最简单的方法是重置所有内容.
我怎么能做到这一点?
鉴于这个非常简单的模型:
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) 有人可以提供一些建议或指出一些可以帮助做出这个决定的博客/文章吗?代理对我来说似乎很陌生,我对使用它们犹豫不决.我喜欢通过在我的模型中使用虚拟属性来控制延迟加载的能力,但这几乎是我能看到的所有好处.我的应用程序是一个简单的MVC Web应用程序,当实体遇到更改状态时,我不需要将任何挂钩连接到上下文中.
无论如何,这是我现在非常有限的利弊列表,让我知道如果我没有任何这个.
优点
缺点
orm entity-framework dynamic-proxy ef-code-first entity-framework-4.1
如何构建一个查询随机行的查询?
如果我在SQL中编写它,那么我会在newid()上输入一个命令并从顶部删除n行.无论如何要先在EF代码中执行此操作?
我尝试创建一个使用newid()并使用DbSet.SqlQuery()执行它的查询.虽然它有效,但它不是最干净的解决方案.
此外,尝试检索所有行并通过新guid对它们进行排序.尽管行数相当小,但它仍然不是一个好的解决方案.
有任何想法吗?
我在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
假设我有以下实体:
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)
但我不希望在这种特殊情况下使用导航属性.
我正在尝试调用接受表值参数的存储过程.我知道实体框架中没有直接支持这个,但据我所知,你可以使用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