C# “我的密钥”属性不是Guid类型,而是包含Guid的自定义引用类型
我有一个域模型,比如说C# “我的密钥”属性不是Guid类型,而是包含Guid的自定义引用类型,c#,entity-framework,domain-driven-design,C#,Entity Framework,Domain Driven Design,我有一个域模型,比如说Contract在这个类中我有Id属性,但这不是一个简单的Guid类型,而是一个Contract类型 public class Contract { public ContractId Id {get; set; } } 在我的代码中的其他地方: public class ContractId { public Guid Id { get; set; } public ContractId(){} public ContractId(
Contract
在这个类中我有Id
属性,但这不是一个简单的Guid
类型,而是一个Contract
类型
public class Contract
{
public ContractId Id {get; set; }
}
在我的代码中的其他地方:
public class ContractId
{
public Guid Id { get; set; }
public ContractId(){}
public ContractId(Guid id){ Id=id; }
}
现在在我的DbContext中,我需要说明哪些属性是我的key属性
modelBuilder.Entity<Contract>()
.HasKey(k => k.Id)
.ToTable("Contract", "Catalog");
modelBuilder.Entity()
.HasKey(k=>k.Id)
.ToTable(“合同”、“目录”);
虽然我没有编译时错误,但在运行时这会很恼火,因为我不能使用construcd
作为键属性。然后我想指定HasKey(k=>k.Id.Id)
,因为这是一个有效的Guid,但仍然有一个问题。我能做什么?您不能在实体中使用as键。毫无疑问,这是一个。实体的键必须是基元类型,并且必须在同一个类中声明。最常见的是,键成员是int
或GUID
类型,尽管任何基元类型都可以用作键属性
modelBuilder.Entity<Contract>()
.HasKey(k => k.Id)
.ToTable("Contract", "Catalog");