Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8901

EntityFrameworkCoreでMigrationsしたときのテーブル名や定義名

$
0
0

EntityFrameworkCoreで、業務で何も考えずに名前を決めたせいで外部キー(以下、「FK」)で困ったので、テーブル名や定義名がどう設定されるのか確認した。

  • 確認環境
    • SQL Server 14.0
    • .net core 2.2
    • EntityFrameworkCore 2.2

テーブル名

結論
DbContextクラスのプロパティ名がそのままテーブル名になる

CorporateDbContext.cs
publicclassCorporateDbContext:DbContext{publicCorporateDbContext(){}publicCorporateDbContext(DbContextOptions<ApplicationCommandDbContext>options):base(options){}protectedoverridevoidOnModelCreating(ModelBuildermodelBuilder){}publicDbSet<User>User{get;set;}publicDbSet<UserDetail>UserDetails{get;set;}publicDbSet<Companys>Company{get;set;}publicDbSet<CompanyDetails>CompanyDetails{get;set;}}

この場合だと、UserCompanysのクラスが単数形に、
UserDetailCompanyDetailsのクラスが複数形になる。

カラム名(FK)

結論
クラス名+"Id"で自動生成される

Companys.cs
publicclassCompanys{publicGuidId{get;set;}publicstringName{get;set;}publicvirtualICollection<CompanyDetail>CompanyDetail{get;set;}}
CompanyDetail.cs
publicclassCompanyDetail{publicGuidId{get;set;}publicstringDetailKey{get;set;}publicstringDetailValue{get;set;}}

上記のように親テーブルから子テーブルに対してプロパティを実装した場合、EntityFrameworkCoreではシャドウプロパティとしてFKが自動的に設定され、テーブルにも実装される。
上の場合だと、データベースのCompanyDetailテーブルにはCompanysIdのカラムが実装される。

最後に

クラスやプロパティの命名は昔からきちんと決めることが大事と言われていたけど、それを痛感した。
私がやってしまったのはFKのほうで、明示的にFKのプロパティを考えなしに実装した結果、CompanyIdCompanysIdの両方がテーブルに実装されてしまった。

参考

EntityFrameworkCore シャドウ プロパティ
EntityFrameworkCore リレーションシップ


Viewing all articles
Browse latest Browse all 8901

Trending Articles