3

Property、Person、Address、および Lease の 4 つのテーブルのシード データを使用して、SQL データベースを初期化しようとしています。問題は、Person、Address、および Lease エンティティにシード データを入力することです。Package Management Counsel ウィンドウから update-database -force を実行すると、「エントリの更新中にエラーが発生しました。詳細については内部例外を参照してください」というエラーが表示されます。プロパティ テーブルは、update-database の実行後にシード データが取り込まれる 4 つのテーブルのうちの唯一のテーブルです。

この問題は、このデータベース設計を複雑にする 1 対 1 および 1 対多の関係が原因であると想定しています。シード データが Lease、Person、アドレス エンティティ。

データベース図:

ここに画像の説明を入力

protected override void Seed(PropertyContext context)
{   
    GetProperty().ForEach(c => context.Properties.Add(c));
    context.SaveChanges();
    GetAddress().ForEach(c => context.Address.Add(c));
    context.SaveChanges();
    GetTenant().ForEach(c => context.Person.Add(c));
    context.SaveChanges();
    GetLease().ForEach(c => context.Leases.Add(c));
    context.SaveChanges();
}

private static List<Property> GetProperty()
{
    var property = new List<Property> {
        new Property
        {
            PropertyId = 1,
            PropName = "Test",
            Address = "13265 Test St.",
            Bathrooms = 3,
            Bedrooms = 2,
            Garage = 2,
            SqFeet= 1400,
            Notes = "Give me a note",
            DateCreated = DateTime.Now,
        }
    };
    return property;
}

private static List<Address> GetAddress() 
{
    var address = new List<Address>{
        new Address
        {
            AddressId = 1,
            City = "Corona",
            State = "CA",
            ZipCode = "92883"
        }
    };
    return address;
}

private static List<Person> GetTenant()
{ 
    var person = new List<Person>{
        new Person
        {
            PersonId = 1,
            FirstName = "Test",
            LastName = "Man",
            EmailAddress = "test@gmail.com",
            Employer = "Verizonwireless",
            JobTitle = "Baseline Tech",
            PropertyOwner = false,
            Notes = "None",
            DateCreated = DateTime.Now,
            LeaseId = 1
         }
    };
    return person;
}

private static List<Lease> GetLease()
{
    var lease = new List<Lease> {
        new Lease
        {
            LeaseId = 1,

            StartDate =DateTime.Today,
            EndDate = DateTime.Now.AddDays(30),
            LeaseAmount = 1550,
            SecurityDeposit = 1550,
            PetDeposit = 0.0,
            OtherDeposit = 0.0,
            Notes = "None",
            LeaseStatus = "Avialable",
            DateCreated = DateTime.Now,
            PropertyId = 1
         }
    };
    return lease;
}


public class Address
{
    [Key]
    [ForeignKey("Property")]
    public int AddressId { get; set; }

    [Required(ErrorMessage = "City name is required.")]
    [MaxLength(35)]
    public string City { get; set; }

    [Required(ErrorMessage = "State name is required.")]
    [Display(Name = "State")]
    [MaxLength(2)]
    public string State { get; set; }

    [Required(ErrorMessage = "Postal code is required.")]
    [Display(Name = "Zip/Postal Code")]
    [MaxLength(5)]
    public string ZipCode { get; set; }

    public virtual Property Property { get; set; }
}

1 対 1 の関係を持つモデル クラス:

public class Address
{
    [Key]
    [ForeignKey("Property")]
    public int AddressId { get; set; }

    [Required(ErrorMessage = "City name is required.")]
    [MaxLength(35)]
    public string City { get; set; }

    [Required(ErrorMessage = "State name is required.")]
    [Display(Name = "State")]
    [MaxLength(2)]
    public string State { get; set; }

    [Required(ErrorMessage = "Postal code is required.")]
    [Display(Name = "Zip/Postal Code")]
    [MaxLength(5)]
    public string ZipCode { get; set; }

    public virtual Property Property { get; set; }
}

 public class Property 
{
    public Property() 
    {
        DateCreated = DateTime.Now;
    }

    public int PropertyId { get; set; }

    [Required(ErrorMessage = "Property name is required.")]
    [Display(Name = "Property Name")]
    [MaxLength(75)]
    public string PropName { get; set; }

    [Required(ErrorMessage = "Property address is required.")]
    [MaxLength(200)]
    public string Address { get; set; }

    [Required(ErrorMessage = "Size of the property is required.")]
    [Display(Name = "SQ Feet")]
    public int SqFeet { get; set; }

    [Required(ErrorMessage = "Number of bedrooms is required. Enter zero for none.")]
    public int Bedrooms { get; set; }

    [Required(ErrorMessage = "Number of bathrooms is required.")]
    public int Bathrooms { get; set; }

    public int Garage { get; set; }   // Stores an index value for a dropdown list

    [MaxLength(500, ErrorMessage = "Max number of characters is 500.")]
    public string Notes { get; set; }

    [Required]
    public DateTime DateCreated { get; set; }

}
4

0 に答える 0