前言:
本篇文章主要记录自己在EF8的学习和使用过程中的碰到一些坑和自己琢磨的一些解决问题的方法以及过程。
问题汇总:
一、Code First 模式下生成表中字段的没有按照我们想要的次序排列
实体上增加注解 [Column(Order = 0)] 可以通过Order来控制字段在表中的排序问题。看微软的文档是可以这样弄的,but我几次都没有生效,不知道是不是因为数据库是mysql的原因。这个注解对于已经生成的表是无效的。
二、如何控制ViewModel中的字段是否必填
不知道是不是设置不对,发现字段上不加Require,在ViewModel使用过程中,也会提示必输,解决方法是字段的类型后加?
三、Id字段的处理
我使用的是GUID,在ViewModel中使用string类型就好了。加?号,解决必输的问题,因为这个字段值我们需要的数据库来给我们自动生成就好了。后面如果页面传递需要用到那么再代码里面转换为Guid。
var id = new Guid(uid);
四、一些字段Model中是非空的,但是ViewModel中我们是后台处理后填充值的
这个问题简单,类似ID的出,那么就在ViewModel中允许字段不是必填,类型后面加?
五、使用了Identity框架中,如何获取当前登录的用户
首先你必须先把UserManager注入到你需要用到的controller中
dentityUser user = await _userManager.GetUserAsync(HttpContext.User);
注意GetUserAsync是异步方法,需要加await
六、 选择框和按钮在同一行情况下,如果转换到手机页面会重叠
我找到的解决方法是css里面写一个屏幕如果小于一定值才生效的类,然后给到选择框
@media screen and (max-width: 768px) {
.buttom10 {
margin-bottom:10px;
}
}
七、bootstrap框架下如何获取select选中的text
$("#materialId").find("option:selected").text()
八、如果表存在外键的情况下,以在代码就有问题
var production = _dbContext.Productions.Where(u => u.id == productionGuid).AsNoTracking().FirstOrDefault();
BomHead head = new BomHead
{
createTime = DateTime.Now,
createUser = user.UserName,
production = production,
ifDel = false,
description = description
};
在savechanges()会直接报错如下
MySqlConnector.MySqlException (0x80004005): Duplicate entry '08dcb21f-ad15-4187-8cc6-b01f04af97dc' for key 'production.PRIMARY'
没搞明白什么问题,但是去掉了AsNoTracking()就一切正常了!!!如果有明白的高手能否解释下。