我的问题是我不知道CreatedBy
列来自。这是我的班级结构。
public abstract class DomainEntity
{
public virtual int Id { get; set; }
}
public class User : DomainEntity
{
/* all the regular stuff you'd expect */
public virtual IList<Role> Roles { get; private set; }
}
public class Role : DomainEntity
{
public virtual User User { get; set; }
public virtual string RoleDescription { get; set; }
}
在应用程序启动时,我可以检查配置,并且可以看到ColumnIterator
用于角色类映射。字典中有4个条目:id、user_id、roledescription和createdby_id,所以查询是合法的,基于配置,但我不能根据类来确定配置。
是的,我已经清除了我的ASP.NET DLL缓存,删除了bin和obj目录,以及其他我能想到的东西。
编辑第1页
这是我的流利配置语句
_configuration = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(_connectionString))
.Mappings(m => m.AutoMappings.Add(GetPersistenceModel()))
.BuildConfiguration();
这是我的电话GetPersistenceModel()
private static AutoPersistenceModel GetPersistenceModel()
{
var configuration = new CustomAutomappingConfiguration();
return AutoMap.AssemblyOf<User>(configuration)
.IgnoreBase(typeof(DomainEntity))
.UseOverridesFromAssemblyOf<UserMapOverride>()
.Conventions.Setup(c =>
{
c.Add<CustomHasManyConvention>();
});
}
我的自定义配置表示只映射公共自动属性。这样我就可以将其他计算属性添加到我的域实体中。用户映射重写确保表名为[User]
,因为我使用User
. 自定义has many约定集cascade all delete orphan for all有许多关系。
编辑第2页
这会变得更好。这是在创建配置对象之后,但在创建会话工厂对象之前的列迭代器。
看到了吗?不createdby_id
映射列列表中的列。这是创建会话工厂对象后的列迭代器。
现在有一个创建目录
列。我现在真的迷路了。
编辑3
好吧,我想我现在有点事了。
上周我接到客户的新要求。这一要求是他们想知道谁创造了一个任务。所以它有一个新的属性,如下所示。
public class Assignment : DomainEntity {
/* etc. */
public virtual User CreatedBy { get; set; }
/* etc. */
}
在我的作业表中,它现在有一个这样的列。
[CreatedBy_id] INT NULL
在这个新列的用户表中有一个fk。
如果我对这个房产置评,一切都会重新开始。SQL返回到查询方式user_id
正是我所期望的那样。是否有某种类型的覆盖可以用来防止这种情况发生?