我刚刚开始制作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
?
提前致谢
答案 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?