2010-01-18 11 views
7

Szukałem przykładu, jak budować relację jeden-do-jednego w EF4v2 z POCO. Znalazłem wiele przykładów, które pokazują tylko, jak utworzyć jeden do wielu lub wiele do wielu. Czy masz jakieś zasoby na ten temat?relacje jeden-do-jednego w Entity Framework 4 v2 z POCO

+0

Chciałbym zobaczyć odpowiedź na to pytanie. –

Odpowiedz

1

Spójrz na Customer ->CustomerDetail w this example. To jest 1: 0..1, ale zgaduję, że to zrobi.

+1

Ten link mówi teraz: "Informacje w tym poście są nieaktualne." i wysyła cię do portalu EF. – DOK

3

To zadziałało dla mnie.

Database design

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Data; 
using System.Data.Entity; 
using System.Data.Entity.ModelConfiguration.Conventions; 
using System.Linq; 

class Program 
{ 
    static void Main(string[] args) 
    { 
    var myContext = new MyContext(@"Server=.\sqlexpress;Database=CodeFirst;integrated security=SSPI;"); 

    var fr = new FirstReading() { Increment = 12}; 
    myContext.Entry(fr).State = EntityState.Added; 
    myContext.SaveChanges(); 

    var sr = new SecondReading() { Increment = 4 }; 
    sr.FirstReading = fr; 
    myContext.SecondReading.Add(sr); 
    myContext.SaveChanges(); 

    fr = myContext.FirstReading.Single(x => x.Increment == 12); 
    Console.WriteLine(fr.Increment); 
    Console.WriteLine(fr.SecondReading.Increment); 
    sr = myContext.SecondReading.Single(x => x.Increment == 4); 
    Console.WriteLine(sr.Increment); 
    Console.WriteLine(sr.FirstReading.Increment); 
    Console.ReadKey(); 
    } 
} 

public class FirstReading 
{ 
    [Key][ForeignKey("SecondReading")] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int FirstReadingId { get; set; } 
    public int Increment { get; set; } 
    public virtual SecondReading SecondReading { get; set; } 
} 
public class SecondReading 
{ 
    [Key] 
    [ForeignKey("FirstReading")] 
    public int FirstReadingId { get; set; } 
    public int Increment { get; set; } 
    public virtual FirstReading FirstReading { get; set; } 
} 

public class MyContext : DbContext 
{ 
    public DbSet<FirstReading> FirstReading { get; set; } 
    public DbSet<SecondReading> SecondReading { get; set; } 

    public MyContext(string connectionString) 
    : base(connectionString) 
    { 
    Database.SetInitializer<MyContext>(null); 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
    } 

}