如何从外部DLL保存复杂对象?

时间:2014-12-19 10:02:06

标签: c# entity-framework ef-code-first

我有一个来自外部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保存此对象?

1 个答案:

答案 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类型作为输入等。