Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在自定义对象模型中处理约束和标识符以持久化到关系数据库_C#_Sql Server_Constraints_Mygeneration - Fatal编程技术网

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是有原因的。甚至他们也没有解决这个问题。实体框架阻止您执行循环关系,因为它会导致多个级联路径。我相信这只会影响到一对一的关系。事实上,我认为我现在走的是正确的道路。我对这个应用有一套非常定制的需求,没有第三方能像手套一样适合我。这是我自己喜欢的项目(没有报酬),所以我有一点回旋余地。这让我走上了正确的道路。我所做的基本上是代码生成递归保存方法,该方法遵循两个方向的关系,首先保存依赖项,但如果找到依赖项,也会保存它们。它传递了一组引用,以确保我不会两次保存相同的数据,从而防止循环行为。再次感谢你的提示!