在实体框架中混合TPT和TPC继承

时间:2017-03-16 10:19:54

标签: c# entity-framework inheritance entity-framework-6

我正在尝试将实体框架模型应用于现有数据库。数据库中的每个表都有一个DateCreated和DateModified列,因此我创建了一个包含这些属性的基类。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="add_product" method="post">
                <div class="modal-body">
                    <div class="header add_product">
                        <div class="form-group">
                            <label class="control-label">Productnaam*</label>
                            <input maxlength="250" id="naam" type="text" required="required"
                                   class="form-control" name="naam"/>
                        </div>
                    </div>
                        <hr/>
             
                <div class="modal-footer ">
                    <button class="btn btn-success completeBtn btn-lg" name="submit"
                            type="submit" style="width: 100%;">
                        <span class="glyphicon glyphicon-ok-sign"></span> Toevoegen
                    </button>
                </div>
                </form>

这是table-per-concrete-type继承。

然后我有一个Order表和一个特定类型的订单的SpecialOrder表。

public abstract class Entity
{
    public DateTime DateCreated { get; set; }
    public DateTime DateModified { get; set; }
}

映射到班级:

|ORDER|
|PK_ID|DateCreated|DateModified|

|SPECIALORDER|
|PK_OrderID|DateCreated|DateModified|

这是每个类型的表继承。

注意:PK_ID和PK_OrderID列将具有相同的值,因此我只将Id属性添加到Order基类。

我对这些类型的EF配置:

public class Order : Entity
{
    public long Id { get; set; }
}

public class SpecialOrder : Order
{
}

因此,我有一个Id属性映射到Order.PK_ID和SpecialOrder.PK_OrderID列,并且在向数据库添加条目时,这两列都使用Order.Id属性值写入。

但是,我的DateCreated和DateModified值只写入订单表中的列,而SpecialOrder中的列输入为NULL。

我可以理解为什么这可能不起作用,因为虽然它在写入时有意义,但当EF从数据库中读取时,哪个表的DateCreated列会选择更新一个属性?

但是,共享一个属性的两列似乎对Order.PK_ID和SpecialOrder.PK_OrderID正常工作。

那么,如何让EF从Entity.DateModified属性更新两个DateModified列?理想情况下,不向模型类添加额外的DateModified属性。

0 个答案:

没有答案