如何在EntityTypeConfiguration类中设置外键

时间:2013-09-15 05:05:32

标签: c# entity-framework entity-framework-5 entity-framework-4.1

我刚刚开始制作EntityTypeConfiguration类并执行了

public class Xyz
{
   public int PlaceId { get; set; }

    public string  Name { get; set; }

    public DbGeography Location { get; set; }

    public int HumanTypeId { get; set; }

    public int AddressId { get; set; }
}

和EntityTypeConfiguration类

 public sealed class XyzConfiguration:EntityTypeConfiguration<Xyz>
{
    public XyzConfiguration()
    {
        ToTable("Place", "dbo");
        HasKey(p => p.PlaceId);   
        Property(p => p.PlaceId)
            .HasColumnName("PlaceId")
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

        Property(p => p.Name);
        Property(p => p.Location). ;
        Property(p => p.HumanTypeId);
        Property(p => p.AddressId);
    }
}

现在如何设置DbGeography和外键列HumanTypeId , AddressId

提前致谢

1 个答案:

答案 0 :(得分:31)

这取决于您要对列进行的操作。如果您有AddressId之类的外键列,则可能需要一些Address个实体与Xyz实体相关联。您需要确定entites如何相互关联,并配置它们之间的映射。

您需要在Address类或Xyz类中使用导航属性,否则没有任何东西可以将外键绑定到,并且您的外部ID列只会被处理作为普通列(这很好,如果这是你想要的)。

因此,如果您要向Xyz实体添加导航属性

public class Xyz
{
    // Your code
    public int AddressId { get; set; }
    public virtual Address MyAddress { get; set; }
}

// Your Address class
public class Address
{
    public int ID;
}

您可以通过沿着这些行执行某些操作来配置映射(它将根据关系而变化:

public sealed class XyzConfiguration : EntityTypeConfiguration<Xyz>
{
    public XyzConfiguration()
    {
        // Your code.

        this.HasOptional(x => x.MyAddress)      // Your Xyz has an optional Address
            .WithMany()                         // Address may be owned by many Xyz objects
            .HasForeignKey(x => x.AddressId);   // Use this foreign key.
    }
}

我没有尝试使用空间类型和EF,但我从这里开始:http://msdn.microsoft.com/en-us/data/hh859721.aspx

有关EF页面入门的映射配置的大量信息:http://msdn.microsoft.com/en-us/data/ee712907尝试“Fluent API - 配置/映射属性和类型”

此处还有一个略有删节的解释: Code First: Independent associations vs. Foreign key associations?