gpt4 book ai didi

entity-framework - EF中的一对一只产生一个外键

转载 作者:行者123 更新时间:2023-12-04 07:25:49 26 4
gpt4 key购买 nike

我正在尝试建立 1-1 关系 - 租户有一个 Url,反之亦然:

型号

public class Tenant {

[Key]
[Required]
public int TenantId { get; set; }

public string Name { get; set; }

public virtual Url Url { get; set; }
public int UrlId { get; set; }

}

public class Url {

[Key]
[Required]
public int UrlId { get; set; }

public string Name { get; set; }

public virtual Tenant Tenant { get; set; }
public int TenantId { get; set; }
}

配置
public class UrlConfiguration : EntityTypeConfiguration<Url> {
public UrlConfiguration() {

HasKey(s => s.UrlId);

}
}
public class TenantConfiguration : EntityTypeConfiguration<Tenant>
{
public TenantConfiguration() {
HasRequired(s => s.Url).WithRequiredPrincipal(s => s.Tenant);
}
}

结果:

enter image description here

我希望两种型号都有外键……为什么不是这样?

最佳答案

关系数据库中不能存在两端具有所需外键的一对一关系。如果保存新租户记录需要 URL 记录,但为了创建该 URL 记录,该 URL 需要租户记录,您将从哪里开始?

即使在数据库级别它实际上不可能存在,这个模型仍然可以工作。根据我的经验,Entity Framework 将强制依赖于应用程序级别,并在检测到您尝试保存的实体之一与另一个实体没有关系时抛出 EntityException。
它创建这个数据库模型,以便它仍然可以保存您的实体,并在应用程序级别强制执行关系。

不,这在数据库级别不好,因为一对一约束不会在那里强制执行。如果您还需要数据库约束,请考虑合并表或重新设计数据结构,这样就不需要一对一的关系了。

关于entity-framework - EF中的一对一只产生一个外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21336319/

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