我有一个我需要建模的关系是1:0..1。 A类对B类有要求的参考,但B类可以不存在A类。EF代码第一个1:0..1关系共享主键
我的理解(这可能是错误的)是这个EF只能创建这种关系,使得A类没有它自己的主键,但与B类使用相同的主键.A类是依赖实体,B类是主键。
是否可以编辑现有A类(带有指向特定B类的链接)并将其更改为链接到不同的B类?它的主键会发生什么?引用A类的其他实体会发生什么?
我有一个我需要建模的关系是1:0..1。 A类对B类有要求的参考,但B类可以不存在A类。EF代码第一个1:0..1关系共享主键
我的理解(这可能是错误的)是这个EF只能创建这种关系,使得A类没有它自己的主键,但与B类使用相同的主键.A类是依赖实体,B类是主键。
是否可以编辑现有A类(带有指向特定B类的链接)并将其更改为链接到不同的B类?它的主键会发生什么?引用A类的其他实体会发生什么?
public partial class PrimaryEntity
{
public PrimaryEntity()
{
ID = Guid.NewGuid();
}
[Key]
public Guid ID { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}
public partial class DependentEntity
{
public DependentEntity()
{
ID = Guid.NewGuid();
}
[Key]
public Guid ID { get; set; }
public string Name { get; set; }
public Guid CurrentPrimaryEntityId { get; set; }
public virtual PrimaryEntity CurrentPrimaryEntity { get; set; }
}
// override this in DataContext
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<DependentEntity>().HasRequired(a => a.CurrentPrimaryEntity).WithMany().HasForeignKey(a => a.CurrentPrimaryEntityId);
base.OnModelCreating(modelBuilder);
}
protected override void Seed(MyDataComtext db)
{
// here is a restriction that FK must be unique
db.Database.ExecuteSqlCommand("ALTER TABLE dbo.[DependentEntity] ADD CONSTRAINT uc_Dependent UNIQUE(CurrentPrimaryEntityId)");
}
var primary = new PrimaryEntity();
db.PrimaryEntity.Add(PrimaryEntity);
var dependent = new DependentEntity();
dependent.CurrentPrimaryEntity = primary;
db.DependentEntity.Add(dependent);
db.SaveChanges();
像这样
这是“WithMany”,我总是努力想办法解决问题。这是违反直觉的,因为没有多一个。所以,如果我想限制进一步限制它,以便从不多于一个依赖链接到同一个主链,那么我想这是关于我的业务逻辑,而不是EF? –
我想这是你需要的。两个实体都可能拥有自己的PK。主要项目是独立的,甚至不了解依赖项目。 – potehin143
你的意思是你现在有*类* A-B,它现在应该成为A-C中的类模型?或者两个*对象* a-b1,它应该成为a-b2? –
人员类别具有对地址类别的引用。一个人必须有一个地址,但地址可以用于其他类,如公司。所以,当我创建一个人时,我也会用它创建一个地址。地址表中保存主键,然后将其分配给该人。如果人“移动”会发生什么?历史数据(如交货)与旧地址相关联,因此我不想仅编辑该记录,我需要将旧地址保留在系统中。 –
在这种情况下,我认为Person-Address应该是多对多的,而交接表有一个指示哪个地址是当前的字段。您不能更改Person的主键(我假定其他实体引用它)。 –