2016-04-05 7 views
0

Ich habe die folgenden Klassen:kippt hinzufügen mit fließend in einer Eins-zu-Eins-Einstellung - ef 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; } 
} 

Mein Ergebnis soll wie folgt aussehen: enter image description here

Ich erstelle folgende fließende Konfiguration in UserAddressConfig:

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

und AdddressConfig:

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

aber wenn ich die Datenbank generieren sieht es so aus: enter image description here

+0

Warum speichern Sie ein 'UserId' in' address' statt in 'User'? Das ergibt für mich keinen Sinn. – wimh

+0

@Wimmel sein Fremdschlüssel –

+0

Ihre Modelle sehen aus. Erstens stimmen sie nicht mit den angelegten Tabellen überein (siehe Adresse). Sie beziehen sich im fließenden Code auf "row.osman". Was ist das? Auf den ersten Blick sieht es so aus, als ob EF Address_Id hinzufügt, weil Ihre Fremdschlüssel nicht korrekt konfiguriert sind. https://msdn.microsoft.com/en-us/data/jj591620.aspx#CompositeKey –

Antwort

1

Sie können diese verwenden:

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; }   

} 

und in der Konfiguration mit fließend api:

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

aber Sie können auch wie unter einem zu viel Beziehung zwischen Benutzern und Adresse:

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; } 
} 
Verwandte Themen