2012-03-23 10 views
0

私はEFコードファーストを使用してローカルの。\ SQLEXPRESSにデータベースを作成しています。EFコードファーストツーSQLアズール

他にもあります。

public class Shop 
{ 
    public int ShopID { get; set; } 

    [Required(AllowEmptyStrings = false, ErrorMessage = "You must enter a name!")] 
    [MaxLength(25, ErrorMessage = "Name must be 25 characters or less")] 
    public string Name { get; set; } 

    [Required(AllowEmptyStrings = false, ErrorMessage = "You must enter an address!")] 
    [MaxLength(30, ErrorMessage = "Address must be 30 characters or less")] 
    public string Address { get; set; } 

    [Required(AllowEmptyStrings = false, ErrorMessage = "You must enter a valid city name!")] 
    [MaxLength(30, ErrorMessage = "City name must be 30 characters or less")] 
    public string City { get; set; } 

    [Required(AllowEmptyStrings = false, ErrorMessage = "You must enter a phone number!")] 
    [MaxLength(14, ErrorMessage = "Phone number must be 14 characters or less")] 
    public string Phone { get; set; } 

    [MaxLength(100, ErrorMessage = "Description must be 50 characters or less")] 
    public string Description { get; set; } 

    [Required(AllowEmptyStrings = false, ErrorMessage = "You must enter a WorkTime!")] 
    public DateTime WorkTimeBegin { get; set; } 

    [Required(AllowEmptyStrings = false, ErrorMessage = "You must enter a WorkTime!")] 
    public DateTime WorkTimeEnd { get; set; } 

    public DateTime? SaturdayWorkTimeBegin { get; set; } 
    public DateTime? SaturdayWorkTimeEnd { get; set; } 
    public DateTime? SundayWorkTimeBegin { get; set; } 
    public DateTime? SundayWorkTimeEnd { get; set; } 

    public int ShoppingPlaceID { get; set; } 
    public virtual ShoppingPlace ShoppingPlace { get; set; } 

    public virtual ICollection<Category> Categories { get; set; } 
} 

public class ShoppingPlace 
{ 
    [Key] 
    public int ShopingplaceID { get; set; } 

    [Required(AllowEmptyStrings = false, ErrorMessage = "You must enter a name!")] 
    [MaxLength(25, ErrorMessage = "Name must be 25 characters or less")] 
    public string Name { get; set; } 

    [Required(AllowEmptyStrings = false, ErrorMessage = "You must enter an address!")] 
    [MaxLength(50, ErrorMessage = "Address must be 50 characters or less")] 
    public string Address { get; set; } 

    [Required(AllowEmptyStrings = false, ErrorMessage = "You must enter a city name!")] 
    [MaxLength(30, ErrorMessage = "City must be 30 characters or less")] 
    public string City { get; set; } 

    [Required(AllowEmptyStrings = false, ErrorMessage = "You must enter a valid phone number!")] 
    [MaxLength(14, ErrorMessage = "Phone number must be 14 characters or less")] 
    public string Phone { get; set; } 

    public int ShoppingCenterID { get; set; } 
    public virtual ShoppingCenter ShoppingCenter { get; set; } 

    public virtual ICollection<Shop> Shops { get; set; } 
} 

とDbContextでの方法:

modelBuilder.Entity<Item>() 
      .HasRequired(p => p.Category) 
      .WithMany(a => a.Items) 
      .HasForeignKey(a => a.CategoryID) 
      .WillCascadeOnDelete(false); 

     modelBuilder.Entity<Category>() 
      .HasRequired(a => a.Shop) 
      .WithMany(a => a.Categories) 
      .HasForeignKey(a => a.ShopID) 
      .WillCascadeOnDelete(false); 

     modelBuilder.Entity<Shop>() 
      .HasOptional(a => a.ShoppingPlace) 
      .WithMany(a => a.Shops) 
      .HasForeignKey(a => a.ShoppingPlaceID) 
      .WillCascadeOnDelete(false); 

     modelBuilder.Entity<ShoppingPlace>() 
      .HasOptional(a => a.ShoppingCenter) 
      .WithMany(a => a.ShoppingPlaces) 
      .HasForeignKey(a => a.ShoppingCenterID) 
      .WillCascadeOnDelete(false); 

私はShopingPlaceを作成し、移入せずにショップを作成することはできませんなぜ私はこれらの2つのクラスを持っています。それを達成する方法?

EDIT:

をしてみました:

modelBuilder.Entity<Shop>() 
      .HasOptional(a => a.ShoppingPlace) 
      .WithOptionalPrincipal(); 

     modelBuilder.Entity<ShoppingPlace>() 
      .HasOptional(a => a.ShoppingCenter) 
      .WithOptionalPrincipal(); 

、それが渡されますが、違いは何ですか? SQL Serverで ShoppingPlaceIDShoppingPlace_ShopingPlaceIDが表示されるのはなぜですか?ItemCategoryの場合は1つしか表示されません。

+1

ルーチンショップテーブルは、Aがあるので、それではありませんShoppingPlaceの – daryal

+0

私は少し編集:) – Bip

答えて

3

レコードのインスタンスまたは正確なメッセージを作成するために使用しているコードを調べなければ、それはわかりにくいですが、おそらくあなたの外部キーShoppingPlaceIDがNULL可能でないためです。

public int? ShoppingPlaceID { get; set; } 

public int ShoppingPlaceID { get; set; } 
public virtual ShoppingPlace ShoppingPlace { get; set; } 

変更

public int ShoppingPlaceID { get; set; } 

あなたも(自分のOnModelCreatingに以下を追加する必要があります)

modelBuilder.Entity<Shop>() 
    .HasOptional(m => m.ShoppingPlace) 
    .WithMany(m=>m.someproperty) // if this is not many then change this 
    .HasForeignKey(m=>m.ShoppingPlaceID); 
関連する問題