2016-12-13 9 views
0

У меня есть родительская таблица как CustomerRequest, которая имеет отношение к таблице ссуды от 1 до 1-0, что означает, что запрос клиента может иметь 1 или 0 заем в таблице ссуды. У меня есть проблема с получением правильной связи в коде Entity Framework.Отношения один к одному в Entity Framework Code First

Это моя 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

похоже, что ваша база данных находится не в правильном состоянии. проверить этот вопрос SO http://stackoverflow.com/questions/1334012/cannot-insert-explicit-value-for-identity-column-in-table-table-when-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. И это неправильный дизайн с точки зрения схемы.

Представьте себе ситуацию, когда у вас есть CustomerRequest с Id=1. Затем вы вставляете две записи Loan с CustomerRequestId=1, но с другим основным ключом Id. Как вы запросите две записи Loan из EF-модели в соотношении 1-0 или 1?

Если схема исправлена, и вы не можете ее изменить, вы должны пойти с отношением 1-много.