当我尝试同时添加一个包含多个子节点的实体时,我在使用EF重新排序插件时遇到问题.我有一个3级结构,每个(Outer 1--* Item 1--* SubItem)之间有一对多的关系.如果我尝试插入带有Items和Subitems的新Outer,则包含SubItems的Items最终会被插入.
示例代码(.NET 4.5,EF 5.0.0-rc):
public class Outer
{
public int OuterId { get; set; }
public virtual IList<Item> Items { get; set; }
}
public class Item
{
public int OuterId { get; set; }
[ForeignKey("OuterId")]
public virtual Outer Outer { get; set; }
public int ItemId { get; set; }
public int Number { get; set; }
public virtual IList<SubItem> SubItems { get; set; }
}
public class SubItem
{
public int SubItemId …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用CF为现有数据库构建模型.我有一个专栏,我忘了设置一个合理的默认值.而不是通过改变它来破坏初始迁移的纯度,我只是想我创建另一个迁移(这是迁移的目的,对吧?:)
public override void Up()
{
AlterColumn("Config", "DefaultTaxPerDollar", c => c.Decimal(nullable: false, precision: 19, scale: 5, defaultValue: 0.087m));
}
public override void Down()
{
AlterColumn("Config", "DefaultTaxPerDollar", c => c.Decimal(nullable: false, precision: 19, scale: 5, defaultValue: 0.0m));
}
Run Code Online (Sandbox Code Playgroud)
但是这会Column already has a DEFAULT bound to it.从SQL Server 产生错误.
如何使用CF迁移更改默认值?或者,如何简单地删除默认值(然后使用不同的值重新创建它)?
编辑:
这是生成的SQL:
ALTER TABLE [Config] ADD CONSTRAINT DF_DefaultTaxPerDollar DEFAULT 0.087 FOR [DefaultTaxPerDollar]
ALTER TABLE [Config] ALTER COLUMN [DefaultTaxPerDollar] [decimal](19, 5) NOT NULL
Run Code Online (Sandbox Code Playgroud)
我想我可能已经找到了一个解决方案,将这个Sql()方法与这个帖子启发的一些复杂的SQL 一起使用.问题源于这样一个事实:SQL Server使用约束来实现默认值(OH!我多么想念MySQL!),并为约束生成了名称.因此,Code First团队无法轻易地更改或删除/重新创建默认值.
我使用过Jarek Kowalski制作的" EF Provider Wrappers ".它工作正常,但我注意到"限制和免责声明"部分,其中说:
除了示例代码中包含的内容之外,提供程序尚未经过广泛测试,因此您应自行承担使用它们的风险.
与任何其他样品,微软不提供任何形式的支持它,但如果你发现错误或有功能建议,请使用此博客的联系表格,让我了解他们.
我在这里有点困惑,微软是否真的希望开发人员在生产网站上使用EnityFramework而没有任何官方支持(或建议)进行二级缓存?
caching entity-framework data-access-layer entity-framework-5
我正在开始一个使用Entity Framework的新项目.我已经研究了如何创建数据库的选项,并发现Code-First Migrations最有意义(如果您需要知道原因,请参阅底部).Code-First Migrations让我可以下载到任意SQL,这意味着我仍然可以完全控制.在实践中,我发现问题是,对于某些常见任务而言,降低到SQL似乎非常重复.
出于我的目的,我并不关心迁移中的扩展是否与提供程序无关(我在内的SQL不是).但是,我并没有在迁移框架中找到一个好的接缝或扩展点来添加这些东西.
举一个具体的例子,假设我想为MS-SQL复制指定一个RowGuid列.每次出现都采取的形式
Sql(
string.Format(
"Alter Table {0} Alter Column {1} Add ROWGUIDCOL",
table,
column ));
Run Code Online (Sandbox Code Playgroud)
所以我编写静态方法来摆脱一些冗余
Sql( MigrationHelper.SetRowGuid( table, column );
Run Code Online (Sandbox Code Playgroud)
-要么-
MigrationHelper.SetRowGuid(Sql, table, column); //passing the Sql method
Run Code Online (Sandbox Code Playgroud)
可能可以在DbMigration上制作这些扩展方法中的任何一种,并通过它来访问它们this. 但仍然看起来不合适:
CreateTable(
"dbo.CustomerDirectory",
c => new
{
Uid = c.Int(nullable: false),
CustomerUid = c.Int(nullable: false),
Description = c.String(nullable: false, maxLength: 50, unicode: false),
RowGuid = c.Guid(nullable: false),
})
.PrimaryKey(t => t.Uid)
.ForeignKey("dbo.Customer", t => t.CustomerUid);
this.SetRowGuid( Sql, "dbo.CustomerDirectory", "RowGuid" );
//Custom method here because of …Run Code Online (Sandbox Code Playgroud) 我想做的很简单.我在db中有一个部件列表,我想根据更新列表删除/插入/更新它们.
主要问题是,当我想要替换一个条目时,我无法将它附加到上下文,因为旧的(待更新的)条目已经附加(通过先前的读取调用)并且抛出异常.
我带着3个想法来到这里.
是否有任何功能,如"context.entry.replace(oldEntry,newEntry)"或任何其他正确的方法来做到这一点?
IEnumerable<SoldPart> old = db.SoldParts.Where(sp=>sp.sessionId == sessionId);
var toDelete = old.Where(po=> !parts.Any(pu=>pu.id == po.id));
var toCreate = parts.Where(po => !old.Any(pu => pu.id == po.id));
var toUpdate = parts.Where(po => old.Any(pu => pu.id == po.id));
foreach (SoldPart item in toDelete)
{
db.SoldParts.Attach(item);
db.SoldParts.Remove(item);
}
foreach (SoldPart item in toCreate)
{
db.SoldParts.Add(item);
}
foreach (SoldPart item in toUpdate)
{
db.SoldParts.Attach(item);
db.Entry(item).State = EntityState.Modified;
}
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud) 我首先使用数据库首先使用EF并从数据库生成我的图表.
现在我已切换并对我的图表进行了许多更改,并希望更新我的数据库架构而不会丢失数据.但是,从图中生成数据库似乎丢弃所有表并重新创建它们.
我首先找到了代码的"数据迁移".首先是模型有什么类似的,或者我能保持数据的任何方式吗?
我正在使用VS 2012和EF5
我不应该使用DbEntityEntry的复杂属性方法或属性方法来获取EntityKey对象.我找不到MSDN的任何示例,但我认为这在Entity Framework 5中是可能的.我不知道实体密钥或实体的名称,因为我使用的是通用存储库接口.
错误是
LINQ to Entities无法识别方法'System.Object GetValue(System.Object,System.Object [])'方法,并且此方法无法转换为商店表达式.
我的代码是
public static GridResult GetAllUsers(int count, int tblsize,string sortcreteria)
{
using (UserEntities entity = new UserEntities())
{
var data = entity.User_Details.Take(count)
.OrderBy(i =>.GetType().GetProperty(sortcreteria).GetValue(i,null))
.Skip(tblsize).ToList();
result.DataSource = data;
result.Count = entity.User_Details.Count();
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
如何使用属性名称作为字符串排序?
c# linq linq-to-entities entity-framework entity-framework-5
我们使用EF5和SQL Server 2012以下两个类:
public class Question
{
public Question()
{
this.Answers = new List<Answer>();
}
public int QuestionId { get; set; }
public string Title { get; set; }
public virtual ICollection<Answer> Answers { get; set; }
}
public class Answer
{
public int AnswerId { get; set; }
public string Text { get; set; }
public int QuestionId { get; set; }
public virtual Question Question { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
映射如下:
public class AnswerMap : EntityTypeConfiguration<Answer>
{
public …Run Code Online (Sandbox Code Playgroud) c# sql-server asp.net-mvc entity-framework entity-framework-5
我有4张桌子.OperationTable,ClientTable,ClientDetails,OperationRes
ClientTable
ClientDetails
OperationTable
OperationRes
我有页面要求客户填写表格以注册smth.一切都必须在一个页面中,在客户提交表单后,我们必须将所有数据插入到表中.OperationTable的日期和时间,ClientTable的名称和姓氏等.我是ASP.NET MVC的新手.我曾尝试使用"Code Fisrt".我创建了Model并且只是用它来自动生成View和Controller.但这不是我想要的.我找到了这个教程.有用!但我有超过4个表,比上面写的更多行.什么是最好的解决方案?