テーブルUser
と別のテーブルがありますCompany
。AUser
はゼロまたは 1 つの会社を登録できます。
User (1)---> (0..1) Company
私のユーザークラス:
public class User {
public string Id {get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName
{
get { return FirstName + " " + LastName; }
}
//Relations
public virtual Company Company { get; set; }
}
私の会社のクラスは次のとおりです。
public class Company {
public int Id { get; set; }
public string CompanyName { get; set; }
public string TaxNumber { get; set; }
public string TaxOffice { get; set; }
public string OfficeTel { get; set; }
public string FaxNumber { get; set; }
public string WebSite { get; set; }
public string Address { get; set; }
public string About { get; set; }
//keys
public int CityId { get; set; }
public int StateId { get; set; }
public string UserId { get; set; }
//relations
public City City { get; set; }
public State State { get; set; }
public User User { get; set; }
}
会社に使用される流れるような API は次のようなものです。
public class CompanyConfiguration : EntityTypeConfiguration<Company>
{
public CompanyConfiguration()
{
this.HasRequired(x => x.User)
.WithOptional(x => x.Company);
this.HasRequired(x => x.City)
.WithMany(x => x.Companies).HasForeignKey(x => x.CityId).WillCascadeOnDelete(false);
this.HasRequired(x => x.State)
.WithMany(x => x.Companies).HasForeignKey(x => x.StateId).WillCascadeOnDelete(false);
this.Property(x => x.Address).HasMaxLength(400);
this.Property(x => x.CompanyName).HasMaxLength(100).IsRequired();
this.Property(x => x.FaxNumber).HasMaxLength(20);
this.Property(x => x.OfficeTel).HasMaxLength(20);
this.Property(x => x.TaxNumber).HasMaxLength(20).IsRequired();
this.Property(x => x.TaxOffice).HasMaxLength(50).IsRequired();
this.Property(x => x.WebSite).HasMaxLength(200);
}
}
実行後、テーブル内の外部キーとして使用されるAdd-Migration
と予想されますが、エンティティ フレームワークの移行によって生成されるのは次のとおりです。UserId
User
Company
CreateTable(
"dbo.Companies",
c => new
{
Id = c.Int(nullable: false, identity: true),
CompanyName = c.String(nullable: false, maxLength: 100),
TaxNumber = c.String(nullable: false, maxLength: 20),
TaxOffice = c.String(nullable: false, maxLength: 50),
OfficeTel = c.String(maxLength: 20),
FaxNumber = c.String(maxLength: 20),
WebSite = c.String(maxLength: 200),
Address = c.String(maxLength: 400),
About = c.String(),
CityId = c.Int(nullable: false),
StateId = c.Int(nullable: false),
UserId = c.String(),
User_Id = c.String(nullable: false, maxLength: 128),
})
.PrimaryKey(t => t.Id)
.ForeignKey("dbo.Cities", t => t.CityId)
.ForeignKey("dbo.States", t => t.StateId)
.ForeignKey("dbo.AspNetUsers", t => t.User_Id)
.Index(t => t.CityId)
.Index(t => t.StateId)
.Index(t => t.User_Id);
Company.User.Id
質問は、Entity Framework が指定したプロパティを関係の外部キーとして使用するように強制する方法です。その理由は、会社の userId 値がコードで頻繁に必要であり、それを取得するために式を使用したくないためです。 .
注: Entity Framework 6.1.2 と asp.net mvc 5 を使用しています