首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在带有实体框架的ASP .NET MVC中创建和初始化一个没有视图的对象?

如何在带有实体框架的ASP .NET MVC中创建和初始化一个没有视图的对象?
EN

Stack Overflow用户
提问于 2018-10-15 02:42:05
回答 1查看 542关注 0票数 0

我在一个本地数据库里有两张桌子--电影和租赁。租房有一个名为itemID的字段,它是对Movie中id的外键引用。

我对这两个表使用了实体框架,这两个表依次创建了以下两个类:

代码语言:javascript
运行
复制
public partial class Movie
{   
    public int id { get; set; }
    public string name { get; set; }
    public virtual Rental Rental { get; set; }
}

public partial class Rental
{
    public int id { get; set; }
    public int itemID { get; set; }
    public string renterName { get; set; }
    public System.DateTime date { get; set; }
    public virtual Movie Movie { get; set; }
}

我希望在/Movie/2中在RentalController中创建一个租房对象。因此,我将Movie/Details.cshtml修改为:

代码语言:javascript
运行
复制
@model Project.Models.Movie

@{
    ViewBag.Title = "Details";
}

<h2>Details</h2>

<div>
    <h4>Movie</h4>
    <hr />
    <dl class="dl-horizontal">

    <dt>
        @Html.DisplayNameFor(model => model.name)
    </dt>

    <dd>
        @Html.Raw(Model.name)
    </dd>

    <dd>
        @using (Html.BeginForm("Create", "Rental", new { id = Model.id, returnURL = HttpContext.Current.Request.Url.AbsolutePath }, FormMethod.Post, new { @id = "createForm", @class = "navbar-right" }))
        {
            @Html.AntiForgeryToken()
            <a class="navbar-nav" href="javascript:document.getElementById('createForm').submit()">Rent</a>
        }
    </dd>
</dl>
</div>
<p>
    @Html.ActionLink("Edit", "Edit", new { id = Model.id }) |
    @Html.ActionLink("Back to List", "Index")
</p>

这就是我迷失自我的地方。如何创建租房对象并将其正确保存到数据库中?

代码语言:javascript
运行
复制
public class RentalController : Controller
{
    private CatalogEntities db = new CatalogEntities();

    // POST: Rental/Create
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(int id, string returnURL)
    {
        Rental rental = new Rental() { itemID = id, renterName = "User" };
        db.Rentals.Add(rental);
        db.SaveChanges();
        return Redirect(returnURL);
    }
}

虽然在单击Rent后没有收到错误,但是没有向Rental添加任何条目。我想知道是否因为租房对象对Movie属性的引用为null,而特定的Movie对象没有对出租对象的引用。即使如此,我还是想不出如何将Movie对象从视图传递到控制器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-23 08:22:41

我终于想出来了。很明显它之前起作用了,只是我问错了。这就解释了为什么我在将错误写回数据库时没有得到任何错误。

回到前面的问题,为了创建和初始化一个带有对另一个对象的引用的对象,您只需要使用正确的键引用创建该对象,即被称为itemID的Movie。虽然在(那个特定的运行时)期间,对新对象Series的引用为null,但只需将其写回数据库就足够了。因此,下面的代码就是我真正需要的:

代码语言:javascript
运行
复制
Rental rental = new Rental() { itemID = id };
db.Rentals.Add(rental);
db.SaveChanges();

之所以这样做,是因为当页面被重定向时,数据库会再次被读取,并且所有的租房对象都会被重新创建。如果新的租赁对象被正确引用,它将自动加载正确的电影对象并将其附加到新的租赁对象。

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

https://stackoverflow.com/questions/52809069

复制
相关文章

相似问题

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