首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EF Table-Per-Type:将新的子项添加到现有父项

EF Table-Per-Type:将新的子项添加到现有父项
EN

Stack Overflow用户
提问于 2019-08-30 15:29:32
回答 2查看 42关注 0票数 0

我是ASP.NET MVC代码的新手。首先,我实现了一个按类型划分表的层次结构,如下所示:

代码语言:javascript
复制
public abstract class Request
{
    public int RequestId {gets;set;}
    public DateTime CreationDate {get;set;}
    public string CreatedBy {gets;set;}
    public bool Active {Get;set;}
}

public class RequestChildA : Request
{
    public string RequestChildAProp1 {get;set;}
    public string RequestChildAProp2 {get;set;}
    ...
}

public class RequestChildB : Request
{
    public string RequestChildBProp1 {get;set;}
    public string RequestChildBProp1 {get;set;}
    ...
}


Request table
+---------------+-------------------------+------------+--------+
|    RequestId  |       CreationDate      |  CreatedBy | Active | 
+---------------+-------------------------+------------+--------+
| 1             | 2019-08-19 09:40:39.817 | HydroFlask |    1   |
+---------------+-------------------------+------------+--------+

RequestChildA table
+---------------+-------------------------+---------------------+
|    RequestId  |   RequestChildAProp1    |  RequestChildAProp1 | 
+---------------+-------------------------+---------------------+
| 1             |         ValueA          |   ValueB            |
+---------------+-------------------------+---------------------+

ChildA和ChildB可以共享相同的请求。我的问题是,如何将新的ChildB添加到具有现有ChildA的现有请求中。

我已经尝试了通常的方法:

代码语言:javascript
复制
var childB = new childB { RequestChildBProp1 = "Value1", RequestChildBPro2 = "Value2" };
childB.RequestId = 1;
db.RequestChildB.Add(childB);
db.SaveChanges();

它在没有错误的情况下完成,但它创建了一个新请求。我需要一个新的ChildB,是与现有的相同的RequestId。请帮帮我!

我的设计可能是错的,请容忍我。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2019-08-30 15:41:06

尝试以下未经测试的方法:

代码语言:javascript
复制
public class Request
{
    public int RequestId {gets;set;}
    public DateTime CreationDate {get;set;}
    public string CreatedBy {gets;set;}
    public bool Active {Get;set;}
}

public class RequestChildA
{
    public string RequestChildAProp1 {get;set;}
    public string RequestChildAProp2 {get;set;}
    ...
    public virtual Request Request {get; set;}

}

public class RequestChildB
{
    public string RequestChildBProp1 {get;set;}
    public string RequestChildBProp1 {get;set;}
    ...
    public virtual Request Request {get; set;}
}
票数 0
EN

Stack Overflow用户

发布于 2019-08-30 15:46:05

我认为你需要像这样创建你的RequestChildARequestChildB

代码语言:javascript
复制
public class RequestChildB
{
    public virtual Request Request {get;set;}

    public string RequestChildBProp1 {get;set;}
    public string RequestChildBProp1 {get;set;}
}

并像这样插入数据:

代码语言:javascript
复制
db.RequestChildB.Add(new RequestChildB
{
    Request = db.Request.Find(1),
    //...other properties
});

db.SaveChanges();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57722399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档