实体框架代码优先 - 两个具有相同名称但位于不同名称空间的实体

时间:2012-01-19 12:51:47

标签: c# entity-framework entity-framework-4.1 code-first

我在以下场景中遇到了db生成问题:

1.cs First.Entities命名空间中的项目实体maped到First_Project表。

namespace First.Entities
{
    #region using section

    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Data.Entity.ModelConfiguration;
    using System.Diagnostics.CodeAnalysis;

    #endregion

    [Table("First_Project")]
    public class Project
    {
        [Key]
        public int Id
        {
            get;
            set;
        }

        [Required]
        [MaxLength(1000)]
        public string Name
        {
            get;
            set;
        }
    }
}

2.cs Second.Entities命名空间中的项目实体maped到Second_Project表。

namespace Second.Entities
{
    #region using section

    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Data.Entity.ModelConfiguration;
    using System.Diagnostics.CodeAnalysis;

    #endregion

    [Table("Second_Project")]
    public class Project
    {
        [Key]
        public int Id
        {
            get;
            set;
        }

        [Required]
        [MaxLength(1000)]
        public string Name
        {
            get;
            set;
        }
    }
}

3.cs DbContext文件

namespace DataContext
{
    #region using section

    using System.Collections.Generic;
    using System.Data.Common;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    using System.Data.Entity.ModelConfiguration.Conventions;
    using System.Diagnostics.CodeAnalysis;
    using First.Entities;
    using Second.Entities;

    #endregion

    public class MyEntities : DbContext
    {
        public DbSet<First.Entities.Project> FirstProjects { get; set; }

        public DbSet<Second.Entities.Project> SecondProjects { get; set; }
    }
}

请帮忙。

2 个答案:

答案 0 :(得分:11)

这是不可能的。单个上下文类型中每个映射实体的类名(无命名空间)必须是唯一的。原因在this answer中列出。

您必须使用不同的类名。顺便说一句。使用不同的(更具体的)类名也可以使您的代码更易读,并且您的类型可以更好地使用。

答案 1 :(得分:0)

我认为,当您为两个实体使用不同的数据库架构时,这是可能的。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
     modelBuilder.Entity<First.Entities.Project>().ToTable("Project", "First");
     modelBuilder.Entity<Second.Entities.Project>().ToTable("Project", "Second");
}