- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个使用 Entity Framework 4 的数据访问层类库项目。我的项目需要一个版本控制概念。我的数据库包含许多包含 «Id» 和 «CreationDateTime» 的表。每个表都与包含详细信息的版本表相关联。所有表都以相同的方式构建,并为版本表添加 «Version» 后缀。
我寻找一种方法来通过 T4 自动化生成我的所有实体(EF4 模型),该自动化将表和表版本(对于指定版本)统一在一个实体中。
这个统一的实体必须支持获取、插入、更新和删除操作。
是否可以通过修改其中一个 T4 模板来实现?如果是,怎么办?
非常感谢任何指点。
最佳答案
可能不是您要找的,但您可以查看 this blog post我在其中为日记/版本控制数据库做了类似的概念证明。我没有使用过 T4(这就是为什么我认为这可能不是您正在寻找的,但您可能找不到更好的解决方案)和生成的实体,但是从一个基本实体继承了所有实体版本控制属性。基本上,我通过覆盖 SaveChanges 方法扩展了 DbContext,并在那里设置了我的版本控制属性:
foreach (var entry in this.ChangeTracker.Entries())
{
// Make sure that this customized save changes executes only for entities that
// inherit from our base entity (IEntity)
var entity = (entry.Entity as JEntity);
if (entity == null) continue;
switch (entry.State)
{
// In case entity is added, we need to set OriginalId AFTER it was saved to
// database, as Id is generated by database and cannot be known in advance.
// That is why we save reference to this object into insertedList and update
// original id after object was saved.
case System.Data.EntityState.Added:
entity.UserCreated = user;
entity.DateCreated = now;
insertedList.Add(entity);
break;
// Deleted entity should only be marked as deleted.
case System.Data.EntityState.Deleted:
if (!entity.IsActive(now))
{
invalidList.Add(entity);
continue;
}
entry.Reload();
entity.DateDeleted = now;
entity.UserDeleted = user;
break;
case System.Data.EntityState.Detached:
break;
case System.Data.EntityState.Modified:
if (!entity.IsActive(now))
{
invalidList.Add(entity);
continue;
}
entity.UserCreated = user;
entity.DateCreated = now;
JEntity newVersion = this.Set(entity.GetType()).Create(entity.GetType()) as JEntity;
newVersion = this.Set(entity.GetType()).Add(newVersion) as JEntity;
this.Entry(newVersion).CurrentValues.SetValues(entity);
this.Entry(entity).Reload();
entity.DateDeleted = newVersion.DateCreated;
entity.UserDeleted = user;
break;
case System.Data.EntityState.Unchanged:
break;
default:
break;
}
}
github 上的完整源代码链接在文章中。
此解决方案对实体的当前版本和过去版本使用相同的表,我计划通过尝试将所有“已删除”版本的实体放入单独的表中来改进此概念,该表在 DbContext 和所有逻辑上都是私有(private)的将项目转移到历史记录将保存更改。这种方式将允许公开的公共(public)数据库集仅包含项目的当前版本,从而允许在此类上下文之上构建任何类似动态数据的通用解决方案。
关于c# - 如何通过 T4 自动化为每个实体生成我的所有实体组成的两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7506408/
编辑:我将问题重新表述为更简单且不那么特定领域的问题: 在下面的代码中,我想实现 mplus 函数,该函数结合了受特定字段存在约束的两个函数。结果函数应受两个字段的存在的约束。 谢谢 ! import
我的代码有什么问题?提前致谢! 我正在尝试为我的 docker 容器设置一个虚拟主机。在本地主机上:8000 完美运行,但是当我尝试通过 http://borgesmelo.local/访问时,出现错
这个问题在这里已经有了答案: CSS technique for a horizontal line with words in the middle (34 个答案) 关闭 2 年前。 首先,这是
我是 React Js 的新手,并尝试了解如何通过 ajax 对从不同来源获得的数据进行组合(如下所述: Reactjs - loadResourcesFromServer - combine two
我一直在关注 this tutorial在 docker 服务和 swarms 上。但是我在不同 docker 容器之间的网络连接上遇到了一些问题。 以下是我的 docker-compose.yml
我正在尝试创建一个相对简单的设置来开发和测试 npm 包。事实上,一个问题是,在将代码卷安装到容器后,它会替换 node_modules。 我尝试了很多通常合乎逻辑的东西,主要是为了将 node_mo
我有四种类型A、B、C和D,初始值x Future[Option[A]] 和三个函数:f1: A => Option[B] , f2: B => Future[Option[C]] 和 f3: C =
我有一个包含单词的语料库。我想对他们做一个分析。我接受它们是土耳其字符,但其中一些不是。所以我想检查一个词是否不包含土耳其字符或数字。我的意思是: hey4 valid 33 vali
这是我正在为 Java 入门课解决的学校问题。作业是编写一个程序,生成一个由随机生成的二进制数组成的 8 x 8 矩阵,并让程序检查哪些列(如果有)全为 0,以及主对角线和次对角线是否也由零组成。主对
我正在尝试编写一个由任意数量的 lambda 函数组成的函数。 我有两个简单的 lambda 函数。 f = lambda x: x + 1 g = lambda x: x**2 我对组合函数的尝试是
我在这里学习 Docker Compose 教程 https://docs.docker.com/get-started/part5/#recap-optional version: "3" serv
我正处于要为应用程序编写 androidTests 的状态。 阅读 Testing Compose 的文档,我创建了一个文件并编写了一个简单的测试来检查进度: ExamineTest.kt: clas
我最近刚跨过木偶继承。围绕它的几个问题: 使用p继承是一种好习惯吗?一些经验丰富的木偶同事告诉我,木偶的继承不是很好,我不太相信。 来自OO世界,我真的很想了解木偶继承的原理,以及覆盖的原理。 最佳答
我正在尝试使用 docker-compose 创建一个基本网页 这是我的 yml 文件 identidock: build: . ports: - "5000:5000" envir
我们有docker-compose.yml,其中包含Kafka,zookeeper和schema registry的配置 当我们启动docker compose时,出现以下错误 docker-comp
我在玩 Haskell 的类型时无意中发现了 length 。总和 有效。是否有一些语义应该允许它工作,或者这仅仅是类型定义的一个缺点?我在下面编写了每个类型定义。 length :: Foldabl
如何防止缩小仅包含 JFormattedTextFields 的 JPanel。 JFormattedTextField textF1; JFormattedTextField textF2;
我尝试更 retrofit 载我的 Docker 卷的用户,但执行此操作的是“root”用户,而不是“安全用户”。知道如果我在 Dockerfile 中执行“chown -R/var/www”,这将不
我正在尝试将 scalaz 的 ioeffect IO[E,A] monad 用于一段非常有效的代码。 我试图用 IO[E,A] 在高层次上重写的代码需要一些关于存储在云中的文件的元数据。代码试图:
这个问题已经有答案了: What special characters must be escaped in regular expressions? (13 个回答) 已关闭 5 年前。 java中
我是一名优秀的程序员,十分优秀!