1

这里一个简单的模型流利的映射:出了错在EF 4.1代码第一次

public class Product1 
{ 
    public int Id { get; set; } 
    public double Price { get; set; } 
    public int CurrencyID { get; set; } 
    public Currency Currency { get; set; } 
} 

public class Product2 
{ 
    public int Id { get; set; } 
    public double Price { get; set; } 
    public int CurrencyID { get; set; } 
    public Currency Currency { get; set; } 
} 

public class Currency 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string ISO4217 { get; set; } 
    public string Symbol { get; set; } 
} 

正如你可以看到,货币仅仅是将两个不同的实体使用的名单,但如果我尝试运行这,它给了我一个错误,说这是无效的,因为可能导致多个层叠路径。

现在我正在努力思考,如何建模上OnModelCreating

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Product1>().HasRequired(p => p.Currency).WithMany().WillCascadeOnDelete(false); 
    modelBuilder.Entity<Product2>().HasRequired(p => p.Currency).WithMany().WillCascadeOnDelete(false); 
} 

但由于某些原因这一点,虽然产品被正确创建每当我尝试加载它,货币谈到空。

我在这种建模中做错了什么?

谢谢!

+0

你可以写你的评论作为答案,并接受你自己的答案。阅读并查看其他人已经解决问题更容易。 – Slauma

+0

我知道,但是因为我是新来的,所以我不能那样做,直到我获得10点声望点。这是一个愚蠢的规则,但这不是我的错。 –

回答

1

我想通了,我会在这里解释以供将来参考:好看基地创建后,我意识到,这是出于错误的领域创造了FK:P1:ID - >货币:ID,当正确的应是P1:CurrencyID - >货币:ID

于是我找到了一种方法来强制正确的FK:

modelBuilder.Entity<Product1>().HasRequired(p => p.Currency).WithMany().HasForeignKey(p => p.CurrencyId); 

而这一切!

0

地图你的类是这样的:

public class Product1Mapping : EntityTypeConfiguration<Product1> 
    { 
    public Product1Mapping() 
     { 
     ToTable("Product1"); 
     HasKey(p => p.Id); 
     HasRequired(p => p.Tag).WithMany().HasForeignKey(t => t.CurrencyID); 
     } 
    } 

    public class Product2Mapping : EntityTypeConfiguration<Product2> 
    { 
     public Product2Mapping() 
     { 
     ToTable("Product2"); 
     HasKey(p => p.Id); 
     HasRequired(p => p.Tag).WithMany().HasForeignKey(t => t.CurrencyID); 
     //other properties 
     } 
    } 

和改变你OnModelCreating制作方法是这样的:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      base.OnModelCreating(modelBuilder); 
      modelBuilder.Configurations.Add(new AccountMapping()); 
      // Add other mapping classes 
     } 

     public DbSet<Product1> Product1{ get; set; } 
     public DbSet<Product2> Product2{ get; set; } 

看到这些链接,了解更多信息:

http://msdn.microsoft.com/en-us/data/jj591617.aspx

http://entityframework.codeplex.com/workitem/1049