2014-12-19 78 views
3

我有一个来自外部DLL的复杂对象(我无法更改此对象的代码)。如何从外部DLL保存复杂的对象?

以此类为例,该类没有标识并包含其他复杂类。

public class Car : IVehicle 
{ 
    public IWheel Wheel { get; set; } 
    public IEngine Engine { get; set; } 
    public Car(IWheel wheel, IEngine engine) 
    { 
     Wheel = wheel; 
     Engine = engine; 
    } 
} 

如何使用实体框架代码优先保存此对象?

+2

您不能直接保存它,您将不得不将其映射到您的DbContext知道的等效实体类。 – 2014-12-19 10:04:10

+0

我正确地理解我应该在存储库中制作CarDTO,并将Car从Car转移到CarDTO并将CarDTO保存为没有Car,并且这种方法没有其他选择吗? – user45245 2014-12-19 10:15:02

+0

你为什么坚持从第三方程序集使用这个类?即使有可能,这也是错误的,允许基于你无法控制的类型创建数据库对象。 – 2014-12-19 11:21:04

回答

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); 

这样你就可以存储这些实体与最小的额外工作和第三方库的功能重用他们将期待汽车t ypes作为输入等。