簡體   English   中英

實體框架代碼首先在復雜實體之間建立一對一關系

[英]Entity framework code first one-to-one relation between complex entities

伙計們,我是Entity Framework的新手,我不知道如何使用模型構建器建立關系。 我試圖通過使用下面的代碼塊在task和task_assignment之間創建關系。

modelBuilder.Entity<Task>().HasOptional(t => t.TaskAssignment).WithRequired();

我想在Task_Assignment和Employee之間創建一對一的關系。 我試圖建立聯系,但是每種方法都會導致另一個錯誤。 最搶手的在這里。

ReferentialConstraint中的從屬屬性映射到商店生成的列。 列:“ tas_ass_id”。

我有以下數據庫架構。

任務表

CREATE TABLE [dbo].[Task] (
    [tas_id]              INT           IDENTITY (1, 1) NOT NULL,
    [tas_name]            VARCHAR (50)  NOT NULL,
    PRIMARY KEY CLUSTERED ([tas_id] ASC),
);

任務分配表

CREATE TABLE [dbo].[Task_Assignment] (
    [tas_ass_id]            INT IDENTITY (1, 1) NOT NULL,
    [tas_id]                INT NOT NULL,
    [person_responsible_id] INT NOT NULL,
    [person_notified_id]    INT NULL,
    [person_approval_id]    INT NULL,
    PRIMARY KEY CLUSTERED ([tas_ass_id] ASC),
    CONSTRAINT [FK_Task_Assignment_Task] FOREIGN KEY ([tas_id]) REFERENCES [dbo].[Task] ([tas_id]),
    CONSTRAINT [FK_Task_Assignment_EmployeeR] FOREIGN KEY ([person_responsible_id]) REFERENCES [dbo].[Employee] ([emp_id]),
    CONSTRAINT [FK_Task_Assignment_EmployeeN] FOREIGN KEY ([person_notified_id]) REFERENCES [dbo].[Employee] ([emp_id]),
    CONSTRAINT [FK_Task_Assignment_EmployeeA] FOREIGN KEY ([person_approval_id]) REFERENCES [dbo].[Employee] ([emp_id])
);

員工表

CREATE TABLE [dbo].[Employee] (
    [emp_id]                        INT           IDENTITY (1, 1) NOT NULL,
    [emp_name]                      VARCHAR (60)  NOT NULL,NULL,
    PRIMARY KEY CLUSTERED ([emp_id] ASC),

);

任務模型

class Task{
     public int tas_id {get; set;}
     public virtual TaskAssignment TaskAssignment {get; set;}
}

任務分配模型

class TaskAssignment{
     [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int tas_ass_id { get; set; }
    [Required]
    [Display(Name = "Task")]
    public int tas_id { get; set; }
    [ForeignKey("tas_id")]
    public Task Task { get; set; }

    [Required]
    [Display(Name = "Person Responsible")]
    public int person_responsible_id { get; set; }
    [ForeignKey("person_responsible_id")]
    public Employee Responsible { get; set; }

    [Display(Name = "Person Notified")]
    public int person_notified_id { get; set; }
    [ForeignKey("person_notified_id")]
    public Employee Notified { get; set; }

    [Display(Name = "Person Approval")]
    public int person_approval_id { get; set; }
    [ForeignKey("person_approval_id")]
    public Employee Approval { get; set; }
}

員工模型

class Employee{
     public int emp_id {get; set;}
}

模型制作者

protected override void OnModelCreating(DbModelBuilder modelBuilder)
         {
             //configure model with fluent API 
             modelBuilder.Entity<Task>().HasOptional(t => t.TaskAssignment).WithRequired();
             modelBuilder.Entity<TaskAssignment>().HasKey(x=>x.tas_id);

             modelBuilder.Entity<Task>().HasOptional(x=>x.TaskAssignment).WithRequired(x=>x.Task);
         }

我現在真的很累,不知道該怎么辦? 請指導我。 提前致謝

根據您的數據庫方案,TaskAssignment與Employee之間的關系是一對多的(這聽起來很合邏輯,因為通常可以將一名雇員分配給許多任務)。 您的問題似乎不在這里,而在Task和TaskAssignment之間。

關於標准實體框架一對一關系,從屬實體TaskAssignment使用與主實體(Task)相同的fk實體ID,因此您的tas_id列應為TaskAssignment的PK,fk為Task的,並且tas_ass_id應從表中刪除和課。 一對一配置的代碼:

builder.Entity<TaskAssignment>()
    HasKey(x=>x.tas_id);

builder.Entity<Task>()
    .HasOptional(x=>x.TaskAssignment)
    .WithRequired(x=>x.Task);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM