尝试与SQL和Entity Framework建立0..1:1关系

时间:2013-11-11 13:38:10

标签: c# sql sql-server entity-framework

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

表1包含字段:

Id
Field 2
Field 3

表2包含字段:

Table1Id
Field 2
Field 3

现在Table1的PK是Id,而表2的PK是Table1ID(这是有意义的。)

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

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

我的最终目标是,当通过实体框架(db-first,顺便说一句)访问Table1时,我可以通过Table1.Table2到达我的Table2实体(应该为null或填充)。

现在,我必须做类似Table1.Table2s.First()

的事情

我缺少什么关系才能让First()不必要?

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

这是我当前创建的Table2导致我的问题

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

结束

编辑:

这足以让它充满活力。我恢复了我的模型并从头开始/再次连接/它神奇地工作。如果我找出原因,我会尝试思考为什么会这样做并编辑。

1 个答案:

答案 0 :(得分:1)

您使用的是DB Fist还是Code First?使用DB First,它应该可以正常工作:

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

这是一个显示此设置正确提供单例关系的图像:

Singleton

此外,如果您使用文本编辑器编辑.edmx文件,Association属性应定义如下:

<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>

你能仔细检查吗?

如果您使用的是Code-First,那么您需要确保正确定义关系,并将Table2中的Table1成员定义为单实例属性而不是集合。 ..如果您使用CF,可以发布型号代码吗?

相关问题