我正在使用 OData V4、EF6 和 MySql 5.6/5.7 以及以下模型和表格。通过此调用 odata/Applications,我得到了 Application 资源的结果,但是当我扩展角色时出现此错误,如下 odata/Applications?$expand=roles。
错误:执行命令定义时发生错误。有关详细信息,请参阅内部异常。“where 子句”中的未知列“Project3.ApplicationId”
我知道这与映射有关,但我看不出是什么。
public class Role
{
public int Id { get; set; }
public string Name { get; set; }
public int ApplicationId { get; set; }
//public virtual Application Application { get; set; }
}
public class Application
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsDeleted { get; set; }
public virtual ICollection<Role> Roles { get; set; }
public Application()
{
Roles = new List<Role>();
}
}
public class ApplicationView
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<RoleView> Roles { get; set; }
public ApplicationView()
{
Roles = new List<RoleView>();
}
}
public class RoleView
{
public int Id { get; set; }
public string Name { get; set; }
public int ApplicationId { get; set; }
}
create table IF NOT EXISTS Application (
ApplicationId int not null auto_increment primary key,
Name varchar(255) not null,
IsDeleted bool not null default false,
CreatedBy varchar(255) not null,
CreatedOn Datetime not null,
UpdatedBy varchar(255) not null,
UpdatedOn DateTime not null
) 引擎=创新;
create table IF NOT EXISTS Role (
RoleId int not null auto_increment primary key,
Name varchar(255) not null,
ApplicationId int not null,
CreatedBy varchar(255) not null,
CreatedOn Datetime not null,
UpdatedBy varchar(255) not null,
UpdatedOn DateTime not null,
index app_index (ApplicationId),
foreign key (ApplicationId) references Application(ApplicationId) on delete cascade
) 引擎=创新;
这是 OData 操作方法。
[HttpGet]
[ODataRoute("Applications")]
public IQueryable<ApplicationView> Get()
{
var result = IdentityRepository.Applications
.Include("Role")
.ProjectTo<ApplicationView>();
return result;
}
映射类:
public class RoleMap : EntityTypeConfiguration<Role>
{
public RoleMap()
{
ToTable("Role");
HasKey(x => x.Id);
Property(x => x.Id).HasColumnName("RoleId");
// Tried with/without, no change.
//HasRequired(x => x.Application).WithMany(x => x.Roles).HasForeignKey(x => x.ApplicationId);
}
}
public class ApplicationMap : EntityTypeConfiguration<Application>
{
public ApplicationMap()
{
ToTable("Application");
HasKey(x => x.Id);
Property(x => x.Id).HasColumnName("ApplicationId");
// Tried with/without no change.
HasMany(x => x.Roles).WithRequired().HasForeignKey(x => x.ApplicationId);
}
}
我尝试了代码优先和数据库优先 edmx 的存储库,并不断收到相同的错误。