EF Designer数据库首先强制映射到多个命名表

时间:2013-12-07 21:53:35

标签: asp.net-mvc entity-framework-5 ef-database-first

我正在做Entity Frameworks Database的第一种方法,使用EF 5.0,visual studio 2012和Sql server management studio。 Vs和ssms都是快速版本。

我有几个名为ex的表。 “User”或“Product”,但在自动生成实体和表之间的表映射时,EF坚持将“User”映射到dbo.Users,将“Product”映射到dbo.Products。

我尝试过设置工具 - > options-> databasedesigner-> O / R designer->将名称多元化为false。

在VS2012中使用EF设计器中的* .edmx文件时,我还尝试将“Pluralize New Objects”设置为false。

在EF Designer中,它正确地显示“User”映射到“User”表,但是当我在运行期间以调试模式检查我的dbcontext对象并找到它用来访问表的sql时,它访问dbo.Users。

如果我使用Code first方法,那么“modelBuilder.Conventions.Remove();”似乎可以解决这个问题。在模型构建器中,但是如何使用数据库第一种方法解决这个问题?

我应该说我使用IDbcontext进行测试

using System.Data.Entity.Infrastructure;

namespace XX.Core
{
    public interface IDbContext : IDisposable
    {
        IQueryable<T> Query<T>() where T : class;

        void Add<T>(T entity) where T : class;

        void Delete<T>(T entity) where T : class;

        void Update<T>(T entity) where T : class;

        Boolean Any<T>() where T : class;

        int SaveChanges();

        void Dispose();
    }
}

和我不测试时的实际dbcontext

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;

namespace XX.Core.Model
{
    public class XXDb : DbContext, IDbContext
    {
        public XXDb()
            : base("name=XX")
        {

        }

        public DbSet<User> Users { get; set; }
        public DbSet<YY> Products { get; set; }
        public DbSet<Offer> YY { get; set; }
        public DbSet<ZZ> ZZ { get; set; }

        IQueryable<T> IDbContext.Query<T>()
        {
            return Set<T>();
        }

        void IDbContext.Add<T>(T entity) 
        {
            Set<T>().Add(entity);
        }

        void IDbContext.Delete<T>(T entity) 
        {
            Set<T>().Remove(entity);
        }

        void IDbContext.Update<T>(T entity)        
        {
            Set<T>().Attach(entity); 

            SaveChanges();
        }

        Boolean IDbContext.Any<T>()
        {
            return Set<T>().Any();
        }
    }
}

0 个答案:

没有答案