2016-04-12 15 views
0

データベースアーキテクチャがこのような場合、どのようにFluent APIを使用してマッピングを作成しますか?EFコードFluent APIを使用した最初の1対1マッピング

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

私はこのエラーを取得しています。

タイプ「PermanentAddresses」と「Addresses」の間の関連付けの主な終点を特定できません。この関連付けの主な終点は、流暢なAPIまたはデータアノテーションのどちらかの関係を使用して明示的に構成する必要があります。

答えて

0

あなたの複数形はあなたのコレクションを扱っているように、それは思われてしまうが、それはさておき、あなたが何かを試すことができます。

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

は、ご返信いただきありがとうございます。

私は

"ID" に "あるAddressId" と "Users_Id" に "Addresses_Id" を指すようにしたい、この設定は

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

親切にこの generated Tables and Columns

をチェック追加しかし、私が .Map(p => p.MapKey( "Id"))を追加しようとすると、 。マップ(p => p.MapKey( "AddressId")); このように

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")); 

私はエラーが発生します。

つまたは複数の検証エラーがモデルの生成中に検出されました:

あるAddressId:名前:タイプの各プロパティ名は一意である必要があります。プロパティ名 'AddressId'は既に定義されています。 Id:Name:タイプ内の各プロパティ名は一意でなければなりません。プロパティ名 'Id'は既に定義されています。 AddressId:Name:型内の各プロパティ名は一意でなければなりません。プロパティ名 'AddressId'は既に定義されています。 Id:Name:タイプ内の各プロパティ名は一意でなければなりません。プロパティ名 'Id'は既に定義されています。

+0

あなたの問題は、アライメントしていない外部キーの名前に関連している可能性があります。このテクニックは、modelBuilder.Entity ()。HasRequired(pa => pa.Users).WithMany()。HasForeignKey(pa => pa.Id); http://weblogs.asp.net/manavi/associations-in-ef-4-1-code-first-part-5-one-to-one-foreign-key-associationsを参照してください。 –

関連する問題