Entity Framework Code First - два объекта с одинаковым именем, но в разных пространствах имен - PullRequest
10 голосов
/ 19 января 2012

У меня проблема с генерацией БД в следующем сценарии:

1.cs Объект проекта в пространстве имен First.Entities, сопоставленный с таблицей 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, сопоставленный с таблицей 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 file

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 ]

11 голосов
/ 19 января 2012

Это невозможно.Имя класса (без пространства имен) для каждого сопоставленного объекта в одном типе контекста должно быть уникальным.Причина изложена в этом ответе .

Вы должны использовать разные имена классов.Btw.использование разных (более конкретных) имен классов также делает ваш код более читабельным и ваши типы более удобными для использования.

0 голосов
/ 15 марта 2018

Я думаю, что это возможно, когда вы используете разные схемы базы данных для обеих сущностей.

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