Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ASP.NET样板在数据库中存储ValueObject_C#_Asp.net_Asp.net Mvc_Entity Framework_Aspnetboilerplate - Fatal编程技术网

C# 使用ASP.NET样板在数据库中存储ValueObject

C# 使用ASP.NET样板在数据库中存储ValueObject,c#,asp.net,asp.net-mvc,entity-framework,aspnetboilerplate,C#,Asp.net,Asp.net Mvc,Entity Framework,Aspnetboilerplate,尝试使用ASP.NET样板文件和实体框架实现DDD 员工对象 public class Employee : Entity<long> { public virtual string Name { get; protected set; } public virtual Nationality Nationality { get; protected set; } } 尝试添加数据库迁移会产生明显错误 EntityType 'Nationality' has no k

尝试使用ASP.NET样板文件和实体框架实现DDD

员工
对象

public class Employee : Entity<long>
{
   public virtual string Name { get; protected set; }

   public virtual Nationality Nationality { get; protected set; }
}
尝试添加数据库迁移会产生明显错误

EntityType 'Nationality' has no key defined. Define the key for this EntityType.
看了看


我是否应该手动实现上述方法之一以持久化
ValueObject
(如果是,有哪些最佳实践)?或者它已经由ASP.NET样板文件框架完成了?

当您使用Value对象时,不应在Employee对象的National属性上使用virtual。删除虚拟关键字。这应该可以解决问题。仅当引用实体类型时才使用虚拟。您还可以在national.Name属性上删除虚拟对象。

什么是
ValueObject
?我认为这个错误与继承有关<代码>国籍应该被解释为值对象(
ComplexType
在EF术语中)。@GertArnold是@GertArnold当然,我使用的是EF版本
6.1.3
。我可以在EF6中毫无问题地使用您的代码,也就是说:使用ABP中的
ValueObject
实体
。最后,请尝试
modelBuilder.ComplexType()
@GertArnold
ComplexType
是我最后要做的,但它将数据库结构反规范化,
National
的列放入
Employee
的表中。
EntityType 'Nationality' has no key defined. Define the key for this EntityType.