我正在做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();
}
}
}