クライアントと住所の間には 1 対 1 の関係があります。私の理解では、私が持っているOnModelCreating
方法をいじくり回さなければなりません。これで、アプリケーションを実行する準備が整いましたが、データベースを適切に初期化する必要があります。しかし、私はエラーが発生しています。
主な計画は、最初にクライアントを作成し、後でそれらに関連付けるアドレスを作成することです。
これが私のコンテキストクラスです:
public class VolumeV2Context : DbContext
{
public DbSet<GiftCard> GiftCards { get; set; }
public DbSet<Clients> Clients { get; set; }
public DbSet<Address> Address { get; set; }
// use if you need to drop the database
static VolumeV2Context(){
// use if need to reset the models
// Database.SetInitializer(new DropCreateDatabaseIfModelChanges<VolumeV2Context>());
// use to reset whole database tables
Database.SetInitializer(new DropCreateDatabaseAlways<VolumeV2Context>());
}
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Clients>()
.HasOptional(j => j.Address)
.WithOptionalDependent()
.WillCascadeOnDelete(true);
modelBuilder.Entity<Address>()
.HasRequired(j => j.client)
.WithRequiredDependent()
.WillCascadeOnDelete(true) ;
base.OnModelCreating(modelBuilder);
}
}
モデル
public class Address
{
[Required]
public int Id { get; set; }
[DataType(DataType.Text)]
[Display(Name = "Street Address")]
public string StreetAddress { get; set; }
[DataType(DataType.Text)]
[Display(Name = "Postal Code")]
public string PostalCode { get; set; }
[DataType(DataType.Text)]
public string City {get; set; }
[DataType(DataType.Text)]
public string Province {get; set;}
public virtual Clients client { get; set; }
}
public class Clients
{
[Required]
public long Id { get; set; }
[Required]
[DataType(DataType.Text)]
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Required]
[DataType(DataType.Text)]
[Display(Name = "Last Name")]
public string LastName { get; set; }
[Required]
[DataType(DataType.PhoneNumber)]
[Display(Name = "Phone ")]
public string PhoneNumber { get; set; }
public virtual Address Address {get; set;}
[Display(Name = "Email List")]
public Boolean EmailList { get; set; }
[DataType(DataType.EmailAddress)]
[Display(Name = "E-mail")]
public string Email { get; set; }
[DataType(DataType.Text)]
[Display(Name = "Hair Type")]
public string HairType { get; set; }
[DataType(DataType.MultilineText)]
public string Description { get; set; }
}
メインのインデックスメソッドにあるデータベースへの最初の呼び出しで
return View(db.Clients.Take(25).ToList());
次のようなエラーが返されます。
テーブル 'Addresses' に FOREIGN KEY 制約 'FK_dbo.Addresses_dbo.Clients_client_Id' を導入すると、サイクルまたは複数のカスケード パスが発生する可能性があります。ON DELETE NO ACTION または ON UPDATE NO ACTION を指定するか、他の FOREIGN KEY 制約を変更します。制約を作成できませんでした。以前のエラーを参照してください。