私は以下のモデルとテーブルでのOData V4、EF6およびMySQL 5.6/5.7 を使用しています。このアプリケーションでは、odata/Applicationsという名前のアプリケーションリソースの結果は正常ですが、odata/Applications?$ expand = rolesのように、ロールを展開するとこのエラーが発生します。EFのODataのMySQL不明な列 'Project3.x' 'where句'
エラー:コマンド定義を実行中にエラーが発生しました。詳細については、内部例外を参照してください。不明な列「Project3.ApplicationId」「where句」
私はそれをマッピングして何かを知っているが、私は何を参照することはできません。
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
)ENGINE = INNODB;
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
)ENGINE = INNODB;
これは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の両方で、リポジトリを試してみましたが、同じエラーを取得しておきます。
は、 '.INCLUDE( "役割")' '.INCLUDE( "役割")'ではないでしょうか? –
私は、複数形であるかどうかにかかわらず、同じ正確なエラーを試みました。すなわち、Include( "Roles") – Ninos