2016-04-12 10 views
0

Wie soll ich das Mapping mit flüssiger API erstellen, wenn die Datenbankarchitektur so etwas ist?EF Code Erste 1 zu 1 Zuordnung mit Fluent API

public class Users 
{ 
    public Users() 
    {    
     PermanentAddresses = new PermanentAddresses(); 
     TemporaryAddresses = new TemporaryAddresses(); 
    } 
    public int Id { get; set; } 
    public string LastName { get; set; } 
    public string FirstName { get; set; } 
    public virtual PermanentAddresses PermanentAddresses { get; set; } 
    public virtual TemporaryAddresses TemporaryAddresses { get; set; } 
} 

public class PermanentAddresses 
{ 
    // Primary Key and Foreign Key from Users class 
    public string Id { get; set; } 
    // Primary Key and Foreign Key from Addresses class 
    public int AddressId { get; set; } 
    public virtual Users Users { get; set; } 
    public virtual Addresses Addresses { get; set; } 
} 

public class TemporaryAddresses 
{ 
    // Primary Key and Foreign Key from Users class 
    public string Id { get; set; } 
    // Primary Key and Foreign Key from Addresses class 
    public int AddressId { get; set; } 
    public virtual Users Users { get; set; } 
    public virtual Addresses Addresses { get; set; } 
} 

public class Addresses 
{ 
    public Addresses() 
    { 
     PermanentAddresses = new PermanentAddresses(); 
     TemporaryAddresses = new TemporaryAddresses(); 
     Company = new Company(); 
    } 
    public int Id { get; set; }  
    public string CompleteAddress { get; set; } 
    public virtual PermanentAddresses PermanentAddresses { get; set; } 
    public virtual TemporaryAddresses TemporaryAddresses { get; set; } 
    public virtual Company Company { get; set; } 
} 

ich diese Störung erhalte.

Das Hauptende einer Zuordnung zwischen den Typen 'PermanentAddresses' und 'Addresses' konnte nicht ermittelt werden. Das prinzipielle Ende dieser Zuordnung muss explizit konfiguriert werden, indem entweder die fließende Beziehung API oder Datenanmerkungen verwendet werden.

Antwort

0

Ihre Pluralisierung macht es scheinen, wie Sie mit Sammlungen zu tun haben, aber abgesehen davon kann man so etwas versuchen:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    modelBuilder.Entity<PermanentAddresses>() 
     .HasRequired(pa => pa.Users) 
     .WithRequiredDependent(u => u.PermanentAddresses); 

    modelBuilder.Entity<TemporaryAddresses>() 
     .HasRequired(pa => pa.Users) 
     .WithRequiredDependent(u => u.TemporaryAddresses); 

    modelBuilder.Entity<PermanentAddresses>() 
     .HasRequired(pa => pa.Addresses) 
     .WithRequiredDependent(u => u.PermanentAddresses); 

    modelBuilder.Entity<TemporaryAddresses>() 
     .HasRequired(pa => pa.Addresses) 
     .WithRequiredDependent(u => u.TemporaryAddresses); 
} 

https://www.safaribooksonline.com/library/view/programming-entity-framework/9781449317867/ch04s07.html

0

Vielen Dank für Ihre Antwort.

Ich habe diese Config

modelBuilder.Entity<PermanentAddresses>().ToTable("PermanentAddresses", "user"); 
modelBuilder.Entity<PermanentAddresses>().HasKey(x => new { x.Id, x.AddressId }); 

modelBuilder.Entity<TemporaryAddresses>().ToTable("TemporaryAddresses", "user"); 
modelBuilder.Entity<TemporaryAddresses>().HasKey(x => new { x.Id, x.AddressId }); 

Bitte überprüfen Sie diese generated Tables and Columns

ich die "Addresses_Id" auf "AddressId" und die "Users_Id" auf "Id"

zeigen soll Wenn ich jedoch versuche, .Map (p => p.MapKey ("Id")) hinzuzufügen; .Map (p => p.MapKey ("AddressId")); wie folgt

modelBuilder.Entity<PermanentAddresses>().HasRequired(pa => pa.Users).WithRequiredDependent(u => u.PermanentAddresses).Map(p => p.MapKey("Id")); 
modelBuilder.Entity<PermanentAddresses>().HasRequired(pa => pa.Addresses).WithRequiredDependent(u => u.PermanentAddresses).Map(p => p.MapKey("AddressId")); 
modelBuilder.Entity<TemporaryAddresses>().HasRequired(pa => pa.Users).WithRequiredDependent(u => u.TemporaryAddresses).Map(p => p.MapKey("Id")); 
modelBuilder.Entity<TemporaryAddresses>().HasRequired(pa => pa.Addresses).WithRequiredDependent(u => u.TemporaryAddresses).Map(p => p.MapKey("AddressId")); 

Ich erhalte einen Fehler.

Eine oder mehrere Validierungsfehler wurden während der Modellerzeugung erfasst:

AddressId: Name: Jede Eigenschaft Name in einer Art muss eindeutig sein. Der Eigenschaftsname 'AddressId' ist bereits definiert. ID: Name: Jeder Eigenschaftsname in einem Typ muss eindeutig sein. Eigenschaftsname 'Id' ist bereits definiert. AddressId: Name: Jeder Eigenschaftsname in einem Typ muss eindeutig sein. Der Eigenschaftsname 'AddressId' ist bereits definiert. ID: Name: Jeder Eigenschaftsname in einem Typ muss eindeutig sein. Eigenschaftsname 'Id' ist bereits definiert.

+0

Ich denke, dass Ihr Problem möglicherweise damit zusammenhängen, dass Ihre Fremdschlüssel nicht ausgerichtet werden. Sie könnten die Technik hier ausprobieren: modelBuilder.Entity (). HasRequired (pa => pa.Users) .WithMany(). HasForeignKey (pa => pa.Id); Siehe http://weblogs.asp.net/manavi/associations-in-ef-4-1-code-first-part-5-one-to-one-foreign-key-associations –