2016-04-05 6 views
0

を私持っている以下のクラス:は、1対1に堪能で設定を追加カント - エフcodeFirst

User, Address, UserAddress 
public class User 
{ 
    public ICollection<useraddress> userAddresses { get; set; } 
} 

public class Address 
{ 
    public virtual User User { get; set; } 
    public virtual Guid UserId { get; set; } 
    public UserAddress UserAddress { get; set; } 
} 

public class UserAddress 
{ 
    public User User { get; set; } 
    public Guid UserId { get; set; } 
    public Address Address { get; set; } 
    public Guid AddressId { get; set; } 
} 

私の結果は次のようになります。 enter image description here

私はUserAddressConfigで以下のような流暢な構成を作成します:

HasKey(row => new { row.UserId,row.AddressId}); 

AdddressConfig

HasOptional(row => row.UserAddress).WithRequired(row => row.Address).WillCascadeOnDelete(); 

が、私は、データベースを生成するとき、それは次のようになります。 enter image description here

+0

あなたはAddress' 'ではなく、' User'に 'UserId'を保存しないのはなぜ?それは私には意味がありません。 – wimh

+0

@Wimmelその外来キー –

+0

あなたのモデルは見晴らされる。まず、作成されたテーブルと一致しません(アドレス参照)。あなたは流暢なコードで "row.osman"を参照してください。それは何ですか? EFが外部キーを正しく設定していないために、Address_Idが追加されているようです。 https://msdn.microsoft.com/en-us/data/jj591620.aspx#CompositeKey –

答えて

1

は、あなたがこれを使用することができます:

public class User 
{ 
    public Guid Id { get; set; } 

    [InverseProperty("User")] 
    public ICollection<UserAddress> UserAddresses { get; set; } 
} 

public class Address 
{ 
    public Guid AddressId { get; set; } 

    public UserAddress UserAddresses { get; set; } 
} 

public class UserAddress 
{ 
    public Guid AddressId { get; set; } 

    public Address Address { get; set; } 


    [ForeignKey("UserId")] 
    [InverseProperty("UserAddresses")] 
    public User User { get; set; } 

    public Guid UserId { get; set; }   

} 

と流暢なAPIと構成の

modelBuilder.Entity<Address>().HasRequired(c => c.UserAddress) 
.WithOptional(c => c.Address) // or any other option 
.WillCascadeOnDelete(false); 

いますが、ユーザーの間で多くの関係1つを持っており、以下のように対処することができます。

public class User 
{ 
    public Guid Id { get; set; } 

    [InverseProperty("User")] 
    public ICollection<Address> Addresses { get; set; } 
} 

public class Address 
{ 
    public Guid AddressId { get; set; } 

    [ForeignKey("UserId")] 
    [InverseProperty("Addresses")] 
    public User User { get; set; } 

    public Guid UserId { get; set; } 
} 
関連する問題