Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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# 正在尝试与SQL和实体框架建立0..1:1关系_C#_Sql_Sql Server_Entity Framework - Fatal编程技术网

C# 正在尝试与SQL和实体框架建立0..1:1关系

C# 正在尝试与SQL和实体框架建立0..1:1关系,c#,sql,sql-server,entity-framework,C#,Sql,Sql Server,Entity Framework,假设我们的数据库中有两个表 表1包含以下字段: Id Field 2 Field 3 Table1Id Field 2 Field 3 表2包含以下字段: Id Field 2 Field 3 Table1Id Field 2 Field 3 现在表1的主键是Id,表2的主键是Table1ID(这很有意义) 表1可能有也可能没有与之相关的表2实体。(取决于Table1.Field2的值是否为3,但无论如何….) 我在Table2上设置了一个FK,以便Table1.Id与Table2.Ta

假设我们的数据库中有两个表

表1包含以下字段:

Id
Field 2
Field 3
Table1Id
Field 2
Field 3
表2包含以下字段:

Id
Field 2
Field 3
Table1Id
Field 2
Field 3
现在表1的主键是Id,表2的主键是Table1ID(这很有意义)

表1可能有也可能没有与之相关的表2实体。(取决于Table1.Field2的值是否为3,但无论如何….)

我在Table2上设置了一个FK,以便Table1.Id与Table2.Table1Id相关

我在这里的最终目标是,当通过实体框架访问Table1时(顺便说一下,db优先),我可以通过Table1.Table2(应该为null或填充)访问Table2实体

现在,我必须做一些类似于Table1.Table2s.First()的事情

我失去了什么样的关系才有了第一个不必要的东西

注: 表1已存在于我们的数据库中并已使用。表2是新事物的一部分

这是我目前创建的表2,它导致了我的问题

CREATE TABLE Table2(
    Table1Id NUMERIC(18, 0),
    Field2 BIT NOT NULL,    
    Field3 BIT NOT NULL,    


    CONSTRAINT Table2_pk PRIMARY KEY (Table1Id ),

    CONSTRAINT FK_Table1ID
        FOREIGN KEY (Table1Id)
        REFERENCES Table1(Id)
);
更奇怪的是,在EDMX中一切看起来都很好

此外,EDXM文件的关联以重数1和0..1检出

编辑:


在整个过程中,这一切都是有效的。我恢复了我的模型,从头开始连接/再次连接/它神奇地工作了。如果我弄明白了原因,我会试着想想为什么会这样做,然后编辑。

您是先使用DB Fist还是先使用代码?对于DB First,它应该只起作用:

下面是我第一次使用EF DB时得到的图像:

下面的图片显示,此设置确实正确地提供了单例关系:

此外,如果使用文本编辑器编辑
.edmx
文件,则应定义
关联
属性,如下所示:

<Association Name="FK_Table1ID">
          <End Role="Table1" Type="XOneModel.Store.Table1" Multiplicity="1" />
          <End Role="Table2" Type="XOneModel.Store.Table2" Multiplicity="0..1" />
          <ReferentialConstraint>
            <Principal Role="Table1">
              <PropertyRef Name="id" />
            </Principal>
            <Dependent Role="Table2">
              <PropertyRef Name="Table1Id" />
            </Dependent>
          </ReferentialConstraint>
        </Association>

你能再检查一下吗


如果首先使用代码,则需要确保正确定义关系,并且将Table1中的Table2成员定义为单个实例属性而不是集合……如果使用CF,你能发布你的模型代码吗?

你的模型C代码是必要的,以了解为什么你得到的是一个对象集合而不是一个单一的对象。我只是调用一些实体,比如var test=dbcontext.Table1.First()[single entity]。然后稍后我想测试一下。表2。所以实际上这只是EF的模型输出,只是一个普通的模型问题不在于调用代码。。。这是您在EF中配置实体的方式。。。你的模型有点不对劲,不是SQL或调用代码。我不明白。如果模型是由EF(顺便说一下,是4.0)创建的,那么这不应该与我在SQL中的设置方式相一致吗?即使在我使用Linqpad处理事情的时候,它对这种情况的感知设置是1..n,我仍然必须每次使用.First()。你能再检查一下Table1上“Table2”导航属性的“多重性”设置吗?另外,您能深入到Context.cs并获取类定义.cs吗?这正是我想说的,我们需要看到EF生成的实体,如果SQL看起来像上面的那样,.edmx应该像这样。@AndrewCounts是的,希望我们能看到OP的代码并找出它。更改了OP。这很奇怪。顺便说一句,首先是数据库!现在一切正常。将在一秒钟内更新OP。谢谢你的帮助!