Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I have an Entity in Code First Entity framework that currently looks like this:

public class Entity
{
    // snip ...

    public string OriginalDepartment { get; set; }
    public string OriginalQueue { get; set; }

    public string CurrentDepartment { get; set; }
    public string CurrentQueue { get; set; }
}

I would like to create Complex Type for these types as something like this:

public class Location
{
    public string Department { get; set; }
    public string Queue { get; set; }
}

I'd like to use this same type for both Current and Original:

public Location Original { get; set; }
public Location Current { get; set; }

Is this possible, or do I need to create two complex types CurrentLocation and OriginalLocation?

public class OriginalLocation
{
    public string Department { get; set; }
    public string Queue { get; set; }
}

public class CurrentLocation
{
     public string Department { get; set; }
     public string Queue { get; set; }
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
382 views
Welcome To Ask or Share your Answers For Others

1 Answer

It is supported out of box, you do not need to create two complex types.

You can also configure your complex types explicitely with model builder

modelBuilder.ComplexType<Location>();

To customize column names, you should configure them from parent entity configuration

public class Location
{
    public string Department { get; set; }
    public string Queue { get; set; }
}

public class MyEntity
{
    public int Id { get; set; }
    public Location Original { get; set; }
    public Location Current { get; set; }
}

public class MyDbContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.ComplexType<Location>();

        modelBuilder.Entity<MyEntity>().Property(x => x.Current.Queue).HasColumnName("myCustomColumnName");
    }
}

This will map MyEntity.Current.Queue to myCustomName column


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...