C# 在自定义对象模型中处理约束和标识符以持久化到关系数据库
我有一组相互关联的健壮对象,我需要找出处理将它们保存到数据库的最佳方法,同时还要考虑数据约束等问题 假设我有以下课程:C# 在自定义对象模型中处理约束和标识符以持久化到关系数据库,c#,sql-server,constraints,mygeneration,C#,Sql Server,Constraints,Mygeneration,我有一组相互关联的健壮对象,我需要找出处理将它们保存到数据库的最佳方法,同时还要考虑数据约束等问题 假设我有以下课程: class Foo { public int Id { get; set; } public int BarId { get; set; } Bar _bar; public Bar Bar { get { return _bar; } set { if(_bar
class Foo
{
public int Id { get; set; }
public int BarId { get; set; }
Bar _bar;
public Bar Bar
{
get { return _bar; }
set
{
if(_bar != value)
{
_bar = value;
BarId = value.Id;
}
}
}
}
class Bar
{
public int Id { get; set; }
}
那么假设我有以下代码:
var f = new Foo() { Bar = new Bar() };
SaveFoo(f);
在SaveFoo中,我应该如何将对象以正确的顺序保存到数据库?
重要提示:我正在使用MyGeneration从SQL数据结构生成所有这些代码,并且我可以在生成时访问所有约束。您必须从内到外工作 如果您的类中有一个“导航属性”(在本例中为Foo中的Bar),它将附带一个外来id(BarID)。因此,在保存对象本身之前,必须先保存嵌套对象 这里您面临的问题是循环属性(Author-write-book,book-has-Author),在这种情况下,您必须正确定义哪些是主要关系,哪些应该忽略 接下来的问题是级联删除
这就是你要问的吗?你必须彻底解决问题 如果您的类中有一个“导航属性”(在本例中为Foo中的Bar),它将附带一个外来id(BarID)。因此,在保存对象本身之前,必须先保存嵌套对象 这里您面临的问题是循环属性(Author-write-book,book-has-Author),在这种情况下,您必须正确定义哪些是主要关系,哪些应该忽略 接下来的问题是级联删除
这就是你要问的吗?基本上,我想我只是有点困惑,我希望其他人也能解决这个完全相同的问题。我以前构建了自己的可怕的ORM,我知道你的感受:D我现在在可能的情况下使用第三方ORM是有原因的。甚至他们也没有解决这个问题。实体框架阻止您执行循环关系,因为它会导致多个级联路径。我相信这只会影响到一对一的关系。事实上,我认为我现在走的是正确的道路。我对这个应用有一套非常定制的需求,没有第三方能像手套一样适合我。这是我自己喜欢的项目(没有报酬),所以我有一点回旋余地。这让我走上了正确的道路。我所做的基本上是代码生成递归保存方法,该方法遵循两个方向的关系,首先保存依赖项,但如果找到依赖项,也会保存它们。它传递了一组引用,以确保我不会两次保存相同的数据,从而防止循环行为。再次感谢你的提示!基本上,我想我只是有点被难倒了,我希望其他人也能解决同样的问题。我以前构建了自己的可怕的ORM,我知道你的感受:D我现在在可能的地方使用第三方ORM是有原因的。甚至他们也没有解决这个问题。实体框架阻止您执行循环关系,因为它会导致多个级联路径。我相信这只会影响到一对一的关系。事实上,我认为我现在走的是正确的道路。我对这个应用有一套非常定制的需求,没有第三方能像手套一样适合我。这是我自己喜欢的项目(没有报酬),所以我有一点回旋余地。这让我走上了正确的道路。我所做的基本上是代码生成递归保存方法,该方法遵循两个方向的关系,首先保存依赖项,但如果找到依赖项,也会保存它们。它传递了一组引用,以确保我不会两次保存相同的数据,从而防止循环行为。再次感谢你的提示!