![](/img/trans.png)
[英]Entity Framework 5.0 code first one to one and one to many relationship
[英]One to One relationship in Entity Framework Code First
我有一个作为CustomerRequest的父表,该表与贷款表之间的关系为1到1-0,这意味着客户请求在贷款表中可以有1或0个贷款。 我首先在实体框架代码中获得正确的关系时遇到问题。
这是具有正确关系的“我的CustomerRequest表”脚本:
CREATE TABLE [Loan].[CustomerRequest]
(
[Id] INT IDENTITY(1,1)
,[CorrelationId] VARCHAR(500)
,[CustomerNumber] BIGINT
....
CONSTRAINT PK_CustomerRequest PRIMARY KEY([Id])
)
这是贷款表:
CREATE TABLE [Loan].[Loan]
(
[Id] INT IDENTITY(1,1)
,[CustomerRequestId] INT
.....
CONSTRAINT PK_Loan PRIMARY KEY([Id])
,CONSTRAINT FK_Loan_CustomerRequestId FOREIGN KEY([CustomerRequestId]) REFERENCES [Loan].[CustomerRequest]([Id])
)
这是我的客户请求模型:
public class CustomerRequest
{
public int Id { get; set; }
public string CorrelationId { get; set; }
.....
public virtual Loan Loan { get; set; }
}
和贷款模型:
public class Loan
{
public int Id { get; set; }
public int CustomerRequestId { get; set; }
....
public virtual CustomerRequest CustomerRequest { get; set; }
}
我在CustomerRequestMap中具有以下关系:
HasKey(t => t.Id).HasOptional(t => t.Loan).WithRequired(t => t.CustomerRequest);
当我尝试插入贷款表时出现此错误:
{"Cannot insert explicit value for identity column in table 'Loan' when IDENTITY_INSERT is set to OFF."}
您必须像这样修改您的实体和配置。
public class CustomerRequest
{
public int Id { get; set; }
public string CorrelationId { get; set; }
public virtual Loan Loan { get; set; }
}
public class CustomerRequestMap : EntityTypeConfiguration<CustomerRequest>
{
public CustomerRequestMap()
{
Property(x => x.Id)
.IsRequired()
.HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity);
}
}
public class Loan
{
//public int Id { get; set; }
[Key, ForeignKey("CustomerRequest")]
public int CustomerRequestId { get; set; }
public virtual CustomerRequest CustomerRequest { get; set; }
}
public class LoanMap : EntityTypeConfiguration<Loan>
{
public LoanMap()
{
HasRequired(m => m.CustomerRequest)
.WithOptional(m => m.Loan)
;
}
}
使用此配置,您可以具有1-0或1关系,但是您必须修改架构脚本。
您不能将Id
作为主键,而将CustomerRequestId
作为外键,EF不允许1-0或1关系。 从架构的角度来看,这也是一个错误的设计。
想象一下当您的CustomerRequest
Id=1
。 然后,插入两个带有CustomerRequestId=1
但具有不同Id
主键的Loan
条目。 您将如何以1-0或1关系查询EF模型中的两个Loan
条目?
如果该模式是固定的,并且您不能对其进行修改,那么您必须采用“一对多”关系。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.