我将实体框架与通过 T4 (TPH).xaml (VS) 和 SSDLToSQL10.tt (VS) 模板生成 T-SQL 一起使用。我有一张桌子
TABLE [dbo].[Users](
[UserId] [int] IDENTITY(1,1) NOT NULL,
[UserName] [nvarchar](100) NOT NULL,
[Password] [nvarchar](50) NOT NULL,
[IsPaid] [bit] NOT NULL
由于我有 2 种用户类型,因此字段 IsPaid 是鉴别器。我在我的模型中创建了 TPH。通过 .tt 生成的类是
public abstract partial class User
{
public User()
{
}
public int UserId { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public partial class RegularUser : User
{
}
public partial class PaidUser : User
{
}
public Container()
: base("name=Container")
{
this.Configuration.LazyLoadingEnabled = false;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<User> Users { get; set; }
假设我有 id 为 3 的普通用户。我用相同的数据创建了一个新的付费用户 u 并尝试保存它。
using (var entities = new Container())
{
entities.Entry(u).State = u.UserId == 0 ? EntityState.Added : EntityState.Modified;
entities.SaveChanges();
}
没发生什么事。而且我可以从探查器中看到查询根本不使用 IsPaid 列。任何人都可以帮忙吗?