我有一个来自外部DLL的复杂对象(我无法更改此对象的代码)。
以此类为例,此类没有id并包含其他复杂类。
public class Car : IVehicle
{
public IWheel Wheel { get; set; }
public IEngine Engine { get; set; }
public Car(IWheel wheel, IEngine engine)
{
Wheel = wheel;
Engine = engine;
}
}
如何使用Entity Framework Code First保存此对象?
答案 0 :(得分:0)
不幸的是,EntityFramework不支持没有复杂类型的主键的实体。
但是,您不一定需要创建从第三方库的对象到这些DTO的DTO和转换,只需创建一个子类(如CarEntity),然后向其添加Id属性:
class Car
{
public string Name { get; set; }
}
class CarEntity : Car
{
public int Id { get; set; }
}
实体框架会将此层次结构正确映射到一个表,请参阅所需的迁移步骤:
CreateTable(
"dbo.CarEntities",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name = c.String(),
})
.PrimaryKey(t => t.Id);
通过这种方式,您可以使用最少的额外工作来存储这些实体,并在第三方库的功能中重复使用它们,这些功能将期望Car类型作为输入等。