实体框架没有映射我的一对多关系

时间:2013-09-05 04:04:40

标签: sql-server entity-framework

我对实体框架有疑问。我创建了一个数据库,然后使用Entity Framework Power Tools使用Reverse Engineer Code First选项创建数据库实体的某些模型。产生的关系不是我所期待的。

在DB中,我有四个表:Work,WorkType,WorkCategory,Person。 WorkType,WorkCategory和Person都是与Work表的1对多关系,使用Work表中的外键。

WorkType和WorkCategory关系很好,但是忽略了Work to Person关系。

我这样说是因为work.cs模型类中没有名为Person的强类型虚拟属性(与WorkType和WorkCategory一样),并且WorkMap.cs文件中没有定义任何关系(WorkType和WorkCategory关系是定义的)。

请有人解释我错过了什么?谢谢!

生成的Work.cs模型类:

public partial class Work
{
    public Work()
    {
        this.Comments = new List<Comment>();
        this.Files = new List<File>();
    }
    public int WorkId { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public string TechnicalInfo { get; set; }
    public int PersonId { get; set; }
    public int WorkTypeId { get; set; }
    public int WorkCategoryId { get; set; }
    public System.DateTime Created { get; set; }
    public System.DateTime Updated { get; set; }
    public bool Deleted { get; set; }
    public virtual ICollection<Comment> Comments { get; set; }
    public virtual ICollection<File> Files { get; set; }
    public virtual WorkCategory WorkCategory { get; set; }
    public virtual WorkType WorkType { get; set; }
}

由EF Power Tools生成的workmap.cs映射:

public class WorkMap : EntityTypeConfiguration<Work>
{
    public WorkMap()
    {
        // Primary Key
        this.HasKey(t => t.WorkId);

        // Properties
        this.Property(t => t.Title)
            .IsRequired()
            .HasMaxLength(300);

        this.Property(t => t.Description)
            .IsRequired()
            .HasMaxLength(3000);

        this.Property(t => t.TechnicalInfo)
            .HasMaxLength(400);


        // Relationships
        this.HasRequired(t => t.WorkCategory)
            .WithMany(t => t.Works)
            .HasForeignKey(d => d.WorkCategoryId);
        this.HasRequired(t => t.WorkType)
            .WithMany(t => t.Works)
            .HasForeignKey(d => d.WorkTypeId);

    }
}

显示关系的SQL创建脚本:

CREATE TABLE [dbo].[Person](
    [PersonId] [int] IDENTITY(1,1) NOT NULL,
    [Name] [varchar](300) NOT NULL,
    [Description] [varchar](4000) NULL,
    [EmailAddress] [varchar](250) NOT NULL,
    [Password] [varchar](200) NOT NULL,
    [ReputationPoints] [int] NOT NULL,
    [Created] [datetime] NOT NULL,
    [Updated] [datetime] NOT NULL,
    [Deleted] [bit] NULL,
 CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED 
(
    [PersonId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[WorkType](
    [WorkTypeId] [int] IDENTITY(1,1) NOT NULL,
    [WorkTypeDesc] [varchar](200) NOT NULL,
 CONSTRAINT [PK_WorkType] PRIMARY KEY CLUSTERED 
(
    [WorkTypeId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[WorkCategory](
    [WorkCategoryId] [int] IDENTITY(1,1) NOT NULL,
    [WorkCategoryDesc] [varchar](200) NOT NULL,
    [WorkTypeId] [int] NOT NULL,
 CONSTRAINT [PK_WorkCategory] PRIMARY KEY CLUSTERED 
(
    [WorkCategoryId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Work](
    [WorkId] [int] IDENTITY(1,1) NOT NULL,
    [Title] [varchar](300) NOT NULL,
    [Description] [varchar](3000) NOT NULL,
    [TechnicalInfo] [varchar](400) NULL,
    [PersonId] [int] NOT NULL,
    [WorkTypeId] [int] NOT NULL,
    [WorkCategoryId] [int] NOT NULL,
    [Created] [datetime] NOT NULL,
    [Updated] [datetime] NOT NULL,
    [Deleted] [bit] NOT NULL,
 CONSTRAINT [PK_Work] PRIMARY KEY CLUSTERED 
(
    [WorkId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[File](
    [FileId] [int] IDENTITY(1,1) NOT NULL,
    [Filename] [varchar](500) NULL,
    [Url] [varchar](3000) NULL,
    [WorkId] [int] NOT NULL,
    [Created] [datetime] NOT NULL,
    [Updated] [datetime] NOT NULL,
    [Deleted] [bit] NOT NULL,
 CONSTRAINT [PK_File] PRIMARY KEY CLUSTERED 
(
    [FileId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Comment](
    [CommentId] [int] IDENTITY(1,1) NOT NULL,
    [CommentText] [varchar](2000) NOT NULL,
    [PersonId] [int] NOT NULL,
    [WorkId] [int] NOT NULL,
    [Created] [datetime] NOT NULL,
    [Updated] [datetime] NOT NULL,
    [Deleted] [bit] NOT NULL,
 CONSTRAINT [PK_Comment] PRIMARY KEY CLUSTERED 
(
    [CommentId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO



ALTER TABLE [dbo].[Work]  WITH CHECK ADD  CONSTRAINT [FK_Work_Person] FOREIGN KEY([PersonId])
REFERENCES [dbo].[Person] ([PersonId])
GO
ALTER TABLE [dbo].[Work] CHECK CONSTRAINT [FK_Work_Person]
GO

ALTER TABLE [dbo].[Work]  WITH CHECK ADD  CONSTRAINT [FK_Work_WorkCategory] FOREIGN KEY([WorkCategoryId])
REFERENCES [dbo].[WorkCategory] ([WorkCategoryId])
GO
ALTER TABLE [dbo].[Work] CHECK CONSTRAINT [FK_Work_WorkCategory]
GO

ALTER TABLE [dbo].[Work]  WITH CHECK ADD  CONSTRAINT [FK_Work_WorkType] FOREIGN KEY([WorkTypeId])
REFERENCES [dbo].[WorkType] ([WorkTypeId])
GO
ALTER TABLE [dbo].[Work] CHECK CONSTRAINT [FK_Work_WorkType]
GO

ALTER TABLE [dbo].[File]  WITH CHECK ADD  CONSTRAINT [FK_File_Work] FOREIGN KEY([WorkId])
REFERENCES [dbo].[Work] ([WorkId])
GO
ALTER TABLE [dbo].[File] CHECK CONSTRAINT [FK_File_Work]
GO

ALTER TABLE [dbo].[Comment]  WITH CHECK ADD  CONSTRAINT [FK_Comment_Person] FOREIGN KEY([PersonId])
REFERENCES [dbo].[Person] ([PersonId])
GO
ALTER TABLE [dbo].[Comment] CHECK CONSTRAINT [FK_Comment_Person]
GO

ALTER TABLE [dbo].[Comment]  WITH CHECK ADD  CONSTRAINT [FK_Comment_Work] FOREIGN KEY([WorkId])
REFERENCES [dbo].[Work] ([WorkId])
GO
ALTER TABLE [dbo].[Comment] CHECK CONSTRAINT [FK_Comment_Work]
GO

0 个答案:

没有答案
相关问题