gpt4 book ai didi

c# - Entity Framework 4 单向导航/关系。我究竟做错了什么?

转载 作者:太空宇宙 更新时间:2023-11-03 11:33:01 24 4
gpt4 key购买 nike

我正在尝试制作一个基本的 Address 类,许多不同的类都可以有(公司可以有账单地址和送货地址,每个员工都有家庭地址,等等。 ..).我在 EF4 中首先执行此模型,我认为我可以进行单向导航,但这不起作用。这是我所拥有的:

edmx 模型。请注意,我创建了一个 1-1 关系,然后删除了 Address 上的导航属性,这样只有 CompaniesEmployees 引用一个 Address 但该地址未引用其所有者。

Entity Framework 4 Model

生成的 SQL 看起来是正确的,因为它创建了所有 3 个表,然后执行公司 -> 地址和员工 -> 地址关系,并且执行地址 -> 公司或地址-> 员工关系。

-- Creating table 'Addresses'
CREATE TABLE [Addresses] (
[Id] int IDENTITY(1,1) NOT NULL,
[Street] nvarchar(4000) NOT NULL,
[City] nvarchar(4000) NOT NULL,
[State] nvarchar(4000) NOT NULL,
[Zip] nvarchar(4000) NOT NULL
);
GO

-- Creating table 'Companies'
CREATE TABLE [Companies] (
[Id] int IDENTITY(1,1) NOT NULL,
[Name] nvarchar(4000) NOT NULL,
[Address_Id] int NOT NULL
);
GO

-- Creating table 'Employees'
CREATE TABLE [Employees] (
[Id] int IDENTITY(1,1) NOT NULL,
[Name] nvarchar(4000) NOT NULL,
[Address_Id] int NOT NULL
);
GO

-- Creating foreign key on [Address_Id] in table 'Companies'
ALTER TABLE [Companies]
ADD CONSTRAINT [FK_CompanyAddress]
FOREIGN KEY ([Address_Id])
REFERENCES [Addresses]
([Id])
ON DELETE NO ACTION ON UPDATE NO ACTION;

-- Creating foreign key on [Address_Id] in table 'Employees'
ALTER TABLE [Employees]
ADD CONSTRAINT [FK_EmployeeAddress]
FOREIGN KEY ([Address_Id])
REFERENCES [Addresses]
([Id])
ON DELETE NO ACTION ON UPDATE NO ACTION;

现在我想插入一个 Company 及其 Address...

    [TestMethod]
public void TestMethod1()
{
var context = new Model1Container();
context.AddToCompanies(new Company
{
Name = "TestCompany",
Address = new Address
{
Street = "TestAddress"
}
});
context.SaveChanges();
}

此测试在 SaveChanges() 上失败并出现错误:

System.Data.UpdateException: Entities in 'Model1Container.Addresses' participate in the 'EmployeeAddress' relationship. 0 related 'Employee' were found. 1 'Employee' is expected.

所以看起来 EF 正试图在公司地址上强制执行不可导航的地址 -> 员工关系...

我怎样才能使这项工作?似乎这种关系是相当普遍的做法......感谢您的帮助!

最佳答案

你不能让它发挥作用。强制执行不在数据库中,而是在您的模型中。您告诉 EF 如果没有 CompanyEmployee(那些一对一的关系),Address 就不能存在 - 如果在生成任何 SQL 之前失败.此外,如果您检查生成的 SQL,这些关系不是一对一而是一对多,因为 EF 不支持这种一对一关系(它仅在依赖实体的 PK 是委托(delegate)人的 FK 时才支持)实体)。

关于c# - Entity Framework 4 单向导航/关系。我究竟做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7178043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com