- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个现有的数据库,我正在使用 Entity Framework 6 Code First 进行编码。我有一个适用于选择、插入和删除的多对多关系。我在 EF 为现有关系的多对多表添加额外插入时遇到问题。
架构:
数据库上下文:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer<MainContext>(null);
modelBuilder.Entity<DocumentType>()
.HasMany(u => u.DocumentStatuses)
.WithMany()
.Map(m =>
{
m.MapLeftKey("DOCUMENT_TYPE_ID");
m.MapRightKey("DOCUMENT_STATUS_ID");
m.ToTable("DOCUMENT_TYPES_DOCUMENT_STATUSES");
});
base.OnModelCreating(modelBuilder);
}
DTO:
[Table("DOCUMENT_TYPES")]
public class DocumentType
{
[Key]
[Column("DOCUMENT_TYPE_ID")]
public int? Id { get; set; }
[Required]
[Column("TYPE_NAME")]
public string TypeName { get; set; }
[Required]
[Column("IS_ACTIVE")]
public bool IsActive { get; set; }
[Display(Name = "Updated By")]
[Column("LAST_UPDATED_BY")]
public string LastUpdatedBy { get; set; }
[Display(Name = "Updated Date")]
[Column("LAST_UPDATED_DATE")]
public DateTimeOffset? LastUpdatedDate { get; set; }
public virtual List<DocumentStatus> DocumentStatuses { get; set; }
public DocumentType()
{
DocumentStatuses = new List<DocumentStatus>();
}
}
[Table("DOCUMENT_STATUSES")]
public class DocumentStatus
{
[Key]
[Column("DOCUMENT_STATUS_ID")]
public int? Id { get; set; }
[Required]
[Column("STATUS_NAME")]
public string StatusName { get; set; }
[Required]
[Column("IS_COMPLETE")]
public bool IsComplete { get; set; }
[Required]
[Column("IS_ACTIVE")]
public bool IsActive { get; set; }
[Display(Name = "Updated By")]
[Column("LAST_UPDATED_BY")]
public string LastUpdatedBy { get; set; }
[Display(Name = "Updated Date")]
[Column("LAST_UPDATED_DATE")]
public DateTimeOffset? LastUpdatedDate { get; set; }
}
存储库更新:
public bool Update(DocumentType entity, string updatedBy)
{
DateTimeOffset updatedDateTime = DateTimeOffset.Now;
entity.LastUpdatedBy = updatedBy;
entity.LastUpdatedDate = updatedDateTime;
using (var db = new MainContext())
{
db.DocumentTypes.Add((DocumentType)entity);
db.Entry(entity).State = EntityState.Modified;
foreach (var item in entity.DocumentStatuses)
{
if (item.Id != null)
db.Entry(item).State = EntityState.Unchanged;
}
db.SaveChanges();
}
return true;
}
循环包含:
if (item.Id != null)
db.Entry(item).State = EntityState.Unchanged;
防止添加新记录,但 EF 仍尝试将现有多对多记录的副本插入到 DOCUMENT_TYPES_DOCUMENT_STATUSES 中。
单元测试:
[TestMethod()]
public void UpdateTest()
{
DocumentTypeRepository documentTypeRepository = new DocumentTypeRepository();
DocumentType type = NewDocumentType(true);
DocumentType typefromDb;
string updatedBy = "DocumentTypeRepositoryTests.UpdateTest";
bool actual;
type.IsActive = true;
type.TypeName = RandomValues.RandomString(18);
type.DocumentStatuses.Add(DocumentStatusRepositoryTests.NewDocumentStatus(true));
actual = documentTypeRepository.Update(type, updatedBy);
Assert.AreEqual(true, actual);
typefromDb = documentTypeRepository.GetById((int)type.Id);
Assert.AreEqual(type.DocumentStatuses.Count, typefromDb.DocumentStatuses.Count);
}
当多对多表已经存在时,如何将其设置为 EntityState.Unchanged?
最佳答案
尝试替换
db.DocumentTypes.Add((DocumentType)entity);
db.Entry(entity).State = EntityState.Modified;
与
db.Entry(entity).State = entity.Id == null
? EntityState.Added
: EntityState.Modified;
当对分离的实体进行 CRUD 操作时,不使用 DbSet 操作而只操作实体状态条目会更容易。至少,它会导致更少的错误。
关于c# - Entity Framework Code First 现有数据库集 EntityState.Unchanged on Many-to-Many,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27694854/
我试图告诉 Git 忽略我对属性文件所做的更改,这样我就不会不小心将它提交到我的 git 存储库。我正在使用: git update-index assume-unchanged [文件] 给出输出:
对于我正在开发的项目,我想使用: git add . -A 向舞台添加一些文件。问题是 Git 认为这些文件自上次提交以来没有变化,因此它们被忽略。然而,我亲自更改了该文件,但 Git 仍然认为该文件
我正在开发一个 git 代码库。我想更改服务器跟踪的项目 xml 文件。我想以这样的方式进行设置: 我的本地更改应该被忽略并且永远不会发送到服务器。 服务器应该同步覆盖我的本地更改。 目前我在用 gi
我想共享当前状态下的某个文件,但我不想提交进一步的更改。所以我对那个文件做了“假设不变”。现在,git 忽略了我存储库中这个文件的更改。但是存储库的其他用户呢——他们是否必须在他们自己的存储库中为这个
我只想拥有一个固定大小的 JPanel,它会锁定其大小(用户不能更改大小)。我应该怎么做? 最佳答案 JPanel 不能由用户调整大小。 如果您指的是 JFrame,您可以使用 setResizabl
是否可以向更新查询添加“未更改”参数。 在一些旧代码中我有类似的东西: string query = @"Update Table SET Field1=@var1, Field2=@var2, Fi
当通过 d3.js 传递数据时,该库将数据分为进入/更新/退出组件,但我发现我们在更新部分浪费了大量计算,用于重新计算未更改的值并将属性重新设置为已经存在的相同值。 有什么好的方法可以将“更新”集合进
我不知道我是否遗漏了什么......无论如何: 例如,您可以看到属性为“HomeTeam”=“Forest Green Rovers”的对象的状态为“Unchanged”。无论如何,就我而言,所有实体
我将什么标记为 --assume-unchanged?有什么方法可以找出我使用该选项 stash 的内容吗? 我翻遍了 .git/ 目录,没有看到任何看起来像我期望的东西,但它一定在某个地方。我忘记了
我需要 assume-unchanged 标志来避免错误提交我的项目设置文件。我这样做是通过: git update-index --assume-unchanged 还有一种方法可以使用 --no
我在 development 分支中进行开发,然后在创建发布标签之前合并到 trunk 中。我一直发现一个文件在合并后提交时不断显示为已更改。它没有改变。我发布这个是希望其他人遇到过这个问题并且知道发
我要这个: def compare_list(old, new): new_set = set(new) old_set = set(old) return new_set -
我正在尝试在 Linux TFVC 管道中运行“撤消未更改”命令。 这些命令从 bash 脚本运行: tf workspaces -login:${credentials} -collection:$
下面的(简化的)模板呈现一个带有两个输入字段的表单,根据数据上下文预先填充。可以为多个不同的数据上下文打开该表单(尽管一次只能打开一个),在这种情况下,我希望使用新数据重新呈现所有字段 - 这大多数都
// Rollback changes switch (entry.State) { case EntityState.Added: entry.State = EntityS
我是 JQuery 的新手,对此有疑问 $("#trigger").click( function(){ $("#pnel-menu").toggle("slow");
我有一个简单的雪花模式,我从中生成了我的 Entity Framework 模型。 问题是我试图将一个子实体映射到一个现有的父和/或祖 parent 实体,但它仍然插入它。 我关注了这个: Inser
This answer向您展示如何将由 git 管理的文件标记为“我不想从该文件的存储库中进行更改”- IE 拥有该文件的您自己的本地未跟踪版本,即使它仍处于 git 的修订控制之下 Remote 。
我在一个构建网络应用程序的项目中。我们使用 Git 进行版本控制,使用 Gulp 进行任务自动化。我想暂时忽略文件到某个文件夹,build文件夹。我们倾向于在一天结束时(或编码 session 结束时
我的存储库中有一个目录结构: |-repository/ | | |-repository/fileOne | | | |-subOne/ | | |-subOne/fileTwo |
我是一名优秀的程序员,十分优秀!