C# 正在尝试与SQL和实体框架建立0..1: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
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。谢谢你的帮助!