31
我在我的MVC 3应用程序中创建了一个实体类。其中一个名为RegistryId的属性是主键以及外键。如何创建列主键以及外键?我不使用EF ORM设计器。我正在手工编写课程。实体框架中的主键/外键
我在我的MVC 3应用程序中创建了一个实体类。其中一个名为RegistryId的属性是主键以及外键。如何创建列主键以及外键?我不使用EF ORM设计器。我正在手工编写课程。实体框架中的主键/外键
我认为“不使用EF ORM设计器”是指EF 4.1的新API DbContext
。因为如果你不是指DbContext
API,你仍然需要使用EDMX(设计器)。
您可以使用数据标注(System.ComponentModel.DataAnnotations
):KeyAttribute
和ForeignKeyAttribute
:
public class Registry
{
public virtual int Id { get; set; }
public virtual MyEntity MyEntity { get; set; }
}
public class MyEntity
{
[Key, ForeignKey("Registry")]
public virtual int RegistryId { get; set; }
public virtual Registry Registry { get; set; }
}
或者你可以用流利的API(覆盖在派生上下文OnModelCreating
):
(编辑:流利的映射是反转和不完整)
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<MyEntity>()
.HasKey(e => e.RegistryId);
modelBuilder.Entity<MyEntity>()
.Property(e => e.RegistryId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
modelBuilder.Entity<MyEntity>()
.HasRequired(e => e.Registry)
.WithRequiredDependent(r => r.MyEntity);
}
其中MyEntity
是您的实体与FK和Registry
是1:1关系的主要实体。
@Hi Ladislav:如果有一对多的关系呢? – DotnetSparrow 2011-03-22 16:42:25
MyEntity中的一对多主键不能是外键。必须有其他FK财产或FK财产。 – 2011-03-22 16:44:58
@Ladislav:当我尝试使用[ForeignKEy(“”)]时,它要求列名称。我是否需要向其内部注册表或注册表实体的ID? – DotnetSparrow 2011-03-22 16:48:50