2016-12-13 10 views
0

私は、1から1-0のLoanテーブルとの関係を持つCustomerRequestという親テーブルを持っています。これは、顧客の要求がLoan Tableで1または0のLoanを持つことができることを意味します。 Entity Frameworkコードで正しい関係を最初に取得する際に問題があります。Entity Frameworkコード1対1リレーションシップ

これが正しい関係で私の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."} 
+0

あなたのデータベースは正しい状態ではないようです。 これを確認してくださいこの質問はhttp://stackoverflow.com/questions/1334012/cannot-insert-explicit-value-for-identity-column-in-table-table-went-identity –

+0

@AlexanderTaranしかし、私は挿入することができますSQLで私のSQLテーブルが、エンティティのフレームワーク内で私はこのエラーが表示されます。 – Alma

+0

それから、EFはあなたにアイデンティティがあることを知らない。 –

答えて

1

あなたは少し、このようなあなたのエンティティおよび構成を変更する必要があります。

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の関係で許可しません。そして、それはスキーマの観点からも間違ったデザインです。

CustomerRequestId=1の場合を想像してください。次に、CustomerRequestId=1の2つのLoanエントリを挿入しますが、異なるIdプライマリキーを使用します。 EFモデルから2つのLoanエントリを1-0または1の関係でどのようにクエリしますか?

スキーマが修正されていて修正できない場合は、1対多の関係にする必要があります。

関連する問題