使用值注入器映射不同的属性值

时间:2013-12-09 01:02:30

标签: c# sql-server-2008 entity-framework inheritance valueinjecter

我有一个从基类派生的表。因此,派生表将具有与基表相同的id。 像

public class Animal
{
public int AnimalId{get; set;}
public string Name{get;set;}
}

public class Man:Animal
{
//Primary key as well as foreign key will be AnimalId. 
public string Communicate{get;set;}
}

现在,虽然我可以使用ManId作为数据库中的主键,并使用流畅的api让类知道ManId是Base类AnimalId,但我没有办法在我的poco类和编程中使用ManId。

所以,我使用了viewmodel,在我的类和视图中使用了属性名ManId。我正在使用ValueInjector在模型和视图模型之间进行映射。

我陷入困境并在整个上午寻求解决方案的问题是: valueinjector无法将AnimalId注入ManId,因为名称不一样。

我发现解决方案可能是..使用conventioninjection覆盖默认值但我无法正确实现。

public class PropertyMismatch:ConventionInjection
{
    protected override bool Match(ConventionInfo c)
    {
        return ((c.TargetProp.Name == "ManId" && c.SourceProp.Name == "AnimalId") ||
            (c.SourceProp.Name==c.TargetProp.Name &&                            c.SourceProp.Value==c.TargetProp.Value));

    }


}

如果有人知道解决方案,那对我来说应该是非常有帮助的。对所有观众和解决者都提前做好了。

1 个答案:

答案 0 :(得分:4)

试试这个:

class Program
{
    static void Main( string[] args )
    {
        Animal animal = new Animal() { AnimalId = 1, Name = "Man1" };
        Man man = new Man();
        man.InjectFrom<Animal>( animal );
    }
}

public class Animal:ConventionInjection
{
    public int AnimalId { get; set; }
    public string Name { get; set; }

    protected override bool Match( ConventionInfo c )
    {
        return ((c.SourceProp.Name == "AnimalId") && (c.TargetProp.Name == "ManId"));
    }
}

public class Man : Animal
{

    public int ManId { get; set; } 
    public string Communicate { get; set; }
}