我已经使用Entity Framework 5构建了代码优先模型.这些类有几个枚举.
我首先将模型类放在原型ASP.NET MVC项目中.我还加了
Database.SetInitializer(new DropCreateDatabaseAlways<dbType>());
Run Code Online (Sandbox Code Playgroud)
命令到global.asax.cs文件.
在Visual Studio中运行MVC应用程序产生了我在SQL Server(2008 R2)中想要的数据库模式.(使用枚举的int值列)
然后我将模型代码复制到实际使用它的解决方案中,该解决方案被分成几个项目,一个具有EF代码,另一个是ASP.NET MVC部分.
我还在global.asax.cs中添加了相同的初始化程序
现在,当我运行项目时,我确实在数据库中获得了正确的表,但由于某些奇怪的原因,表中缺少枚举列!
如何让EF生成枚举列?
database sql-server enums entity-framework entity-framework-5
我正在开发MVC 5,EF 5.0代码.我使用文件共享文件夹发布项目.
当模型更改时,我可以使用数据库迁移来更新开发的localDb.但是,在将项目发布到远程服务器之后,它显示了使用完整SQL数据库服务器的生产Web服务器上所需更改的模型和迁移所需的错误.
我知道我可以删除生产服务器上的数据库并让它重新创建数据库.但是,表中已有用户输入的数据.
有没有办法在不重新创建数据库的情况下应用模型/数据库更改?
asp.net asp.net-mvc entity-framework asp.net-mvc-4 entity-framework-5
我有两张桌子:
[Table("Ticket_Admins")]
public class TicketAdmin
{
public TicketAdmin()
{
Name = new Record();
Name.IsRevisioned = false;
Name.IsVisible = true;
Name.Category = typeof(TicketAdmin).Name;
}
[Key]
public int Id { get; set; }
public virtual Record Name { get; set; }
public virtual TicketPost Post { get; set; }
public virtual UserProfile User { get; set; }
}
[Table("UserProfile")]
public class UserProfile
{
private string _email;
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string Email
{
get { return …Run Code Online (Sandbox Code Playgroud) 我无法弄清楚如何访问标记为NotMapped的属性,以便我可以打印它.当我尝试访问它时,我得到了
LINQ to Entities不支持指定的类型成员'LinkAddress'.仅支持初始值设定项,实体成员和实体导航属性.
我的LINQ查询是:
(from n in db.Navigation
join s in db.Sections on n.SectionID equals s.SectionID
join sl in db.Locale_Sections on s.SectionID equals sl.SectionID
where n.Category == "Books" && sl.CultureID == 1
select new
{
s.LinkAddress,
sl.Title,
}).ToList();
Run Code Online (Sandbox Code Playgroud)
我对Section的上下文是:
[Table("Section")]
public class Section
{
[Key, Required, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Int16 SectionID { get; set; }
public Int64 LogoFileID { get; set; }
[ForeignKey("LogoFileID")]
public virtual File File { get; set; }
[Required, MaxLength(15), Column(TypeName = "varchar")]
public string RouteName { …Run Code Online (Sandbox Code Playgroud) 我有一个MeterPeak实体,这个实体有一个MeterReading实体作为外键(包含在问题的底部).MeterReading实体具有由MeterSiteId和DateTime组成的复合主键.
所以我的理解是,在我的MeterPeak实体中,我必须输入一个MeterSiteId和一个与现有MeterReading实体匹配的DateTime,以满足外键约束.我不应该被允许链接到不存在的外键.
但是,在MeterPeakController的编辑操作中,我有以下代码
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(MeterPeak meterpeak)
{
if (ModelState.IsValid)
{
unitOfWork.MeterPeakRepository.Update(meterpeak);
unitOfWork.Save();
return RedirectToAction("Index");
}
ViewBag.MeterSiteId = new SelectList(unitOfWork.MeterSiteRepository.Get(b => true), "Id", "Location", meterpeak.MeterSiteId);
return View(meterpeak);
}
Run Code Online (Sandbox Code Playgroud)
当我输入与现有仪表读数不匹配的MeterSiteId和DateTime并尝试保存时,我希望ModelState.IsValid检查返回false,但它不会.它只有在到达unitOfWork.save()行时才会失败,并且在将此更改保存到dbcontext时出错
The UPDATE statement conflicted with the FOREIGN KEY constraint "FK_dbo.MeterPeaks_dbo.MeterReadings_MeterSiteId_DateTime"
Run Code Online (Sandbox Code Playgroud)
为什么ModelState.IsValid在到达dbcontext.save之前没有找到这个问题?
public class MeterPeak
{
[Key]
public int Id { get; set; }
[ForeignKey("PeakReading"), Column(Order = 1)]
public int MeterSiteId { get; set; }
[ForeignKey("PeakReading"), Column(Order = 2)]
public DateTime DateTime { get; set; }
public int? Rating { …Run Code Online (Sandbox Code Playgroud) asp.net-mvc entity-framework ef-code-first entity-framework-5
在这个例子中:
using System;
using System.Collections.Generic;
using dbModel;
using System.Linq;
using System.Data.Entity.Infrastructure;
namespace WinApp
{
public partial class Form1 : Form
{
private dbEntities dbc;
public IQueryable<ARTIKLI> art;
public IQueryable<ART_GRUPE> grp;
public Form1()
{
InitializeComponent();
dbc = new dbEntities();
}
private void GetData()
{
art = from a in dbc.ARTIKLIs
select a;
grp = from g in dbc.ART_GRUPE
select g;
artikliBindingSource.DataSource = art.ToList();
artGrupeBindingSource.DataSource = grp.ToList();
}
private void Form1_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e)
{
dbc.SaveChanges();
}
private void loadData_Click(object sender, EventArgs …Run Code Online (Sandbox Code Playgroud) 我有以下存储库:
public class GenericRepository<T> : IRepository<T> where T : class
{
public GenericRepository(DbContext dbContext)
{
if (dbContext == null)
throw new ArgumentNullException("An instance of DbContext is required to use this repository", "context");
DbContext = dbContext;
DbSet = DbContext.Set<T>();
}
protected DbContext DbContext { get; set; }
protected DbSet<T> DbSet { get; set; }
public virtual IQueryable<T> Find(Expression<Func<T, bool>> predicate)
{
return DbSet.Where<T>(predicate);
}
public virtual IQueryable<T> GetAll()
{
return DbSet;
}
Run Code Online (Sandbox Code Playgroud)
和服务:
private IRepository<Subject> _subjectsRepository;
private IRepository<Content> _contentsRepository;
public ContentService(IRepositoryProvider …Run Code Online (Sandbox Code Playgroud) 我正在运行一个简单的LINQ查询:
var user = (from u in context.Users
where u.Email == dictionary["email"]
select u).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到这个例外:
LINQ to Entities无法识别方法'System.String get_Item(System.String)'方法,并且此方法无法转换为商店表达式.
如果我使用这个中间步骤,它工作正常.
String myDictionaryItem = dictionary["email"];
var user = (from u in context.Users
where u.Email == myDictionaryItem
select u).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
看起来有点奇怪.Net无法想得更快一点.
(免责声明:可能是一些拼写错误,我更改了一些变量名称)
如何使用LINQ中的条件重写它?
如果selectID = 0,我希望它运行:
var products = from p in product.Table
orderby p.Name
where (p.stock == stockId)
select p;
Run Code Online (Sandbox Code Playgroud)
如果selectID不为零,我希望它运行:
var products = from p in product.Table
orderby p.Name
where (p.stock == stockId) &&
(p.Id == selectID)
select p;
Run Code Online (Sandbox Code Playgroud)
这下面有效,但是我必须使用"虚拟"第二个条件(p.hidden == false)才能使三元运算符工作:
var products = from p in product.Table
orderby p.Name
where (p.stock == stockId) &&
(selectID != 0 ? p.Id == selectID : p.hidden == false)
select p;
Run Code Online (Sandbox Code Playgroud)
有没有办法摆脱(p.hidden == false),因为逻辑中不需要它,只是让操作员工作.谢谢
我有以下行动方法: -
public ActionResult AddServerToRack(AddServerToRack s)
{
if (ModelState.IsValid)
{
try
{
// code goes here
}
}
var errorDesc = ModelState.Select(a=>a.Value.Errors.Select(a2=>a2.ErrorMessage)).ToList();
string desc = "";
foreach (var i in errorDesc)
{
desc = desc + " " + i.ToString();
}
return Json(new { IsSuccess = false, description = desc}, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是获取模型状态内的所有错误消息,并将它们作为json对象发送.但目前我无法在我的操作方法结束时使用foreach获取错误消息的描述.所以任何人都可以建议,我怎么能得到所有的模型状态错误信息描述.谢谢
entity-framework modelstate entity-framework-5 asp.net-mvc-5
c# ×5
linq ×4
asp.net-mvc ×3
sql-server ×2
asp.net ×1
asp.net-4.5 ×1
database ×1
enums ×1
modelstate ×1
orm ×1
webforms ×1
where-clause ×1
winforms ×1