我有一个Generic Repository类,见下文,用于执行常见的数据访问功能,即Add,GetByID等.
public class GenericRepository<TEntity> : IGenericRepository<TEntity> where TEntity : class
{
internal GolfEntities context;
internal DbSet<TEntity> dbSet;
public GenericRepository(GolfEntities context)
{
this.context = context;
this.dbSet = context.Set<TEntity>();
}
public TEntity GetByID(object id)
{
return dbSet.Find(id);
}
Run Code Online (Sandbox Code Playgroud)
我想创建另一个从这个Generic Repository类派生的Repository类,这样我就可以执行其他不属于Generic Repository类的函数,例如,获取用户的全名.
我创建了一个名为UserRepository的类,见下文,它来自Generic Repository,但是,我在编译时遇到错误:
Repository.GenericRepository <User>不包含带0个参数的构造函数
public class UserRepository : GenericRepository<User>, IUserRepository
{
internal GolfEntities _context;
public UserRepository() : base() { }
public UserRepository(GolfEntities context)
{
_context = context;
}
public string FullName()
{
return "Full Name: Test FullName";
}
}
Run Code Online (Sandbox Code Playgroud)
有谁知道如何解决这一问题? …
我正在使用Entity Framework 4.1开发ASP.Net MVC 3应用程序.对于我需要执行的特定复杂查询,我决定编写一个原始SQL查询并将其传递给内置的dbSet.SqlQuery方法.
我有一个像下面这样的服务方法,我将SQL查询分配给一个名为query的字符串变量.由于查询传递了两个参数,我已经参数化这些以防止SQL注入.
public IList<User> GetAvailableLocums(int shiftID, int shiftDateID)
{
var query ="Select .... where t1 = @p0 and t2 = @p1";
ObjectParameter _shiftID = new ObjectParameter("p0", shiftID);
ObjectParameter _shiftDateID = new ObjectParameter("p1", shiftDateID);
object[] parameters = new object[] { _shiftID, _shiftDateID };
return _UoW.User.GetWithRawSql(query, parameters).ToList();
}
Run Code Online (Sandbox Code Playgroud)
然后我将查询和参数传递给我的存储库中的一个方法,该方法为我执行查询.
public IEnumerable<TEntity> GetWithRawSql(string query, params object[] parameters)
{
return dbSet.SqlQuery(query, parameters).ToList();
}
Run Code Online (Sandbox Code Playgroud)
我知道查询是正确的,因为我在SQL Server Management Studio中测试过,但是,当我尝试运行此代码时,我当前收到以下错误
从对象类型System.Data.Objects.ObjectParameter到已知的托管提供程序本机类型不存在映射
有没有人对我如何解决这个问题有任何建议?
谢谢你的帮助.
我正在使用Entity Framework 5.0并且我希望返回一个对象列表,但是,我想对列表中每个对象的一个属性执行DISTINCT。
我知道Stackoverflow 上已经有一些与我的问题类似的问题,但是,我仍然在为这个问题而苦苦挣扎。
目前我的查询看起来像这样
public IList<tblcours> GetAllCoursesByOrgID(int id)
{
return _UoW.tblcoursRepo.All.Where(c => c.tblCourseCategoryLinks.Any(cl => cl.tblUnitCategory.tblUnit.ParentID == id))
.OrderBy(c => c.CourseTitle)
.ToList();
}
Run Code Online (Sandbox Code Playgroud)
但是,我需要对属性MainHeadingID执行DISTINCT以删除任何已经具有相同 ID 的对象,但仍返回整个对象及其所有属性。
最好,我想返回IList,正如您从我的方法中看到的那样,而不是 Anonymous Type。
非常感谢您对此的任何帮助。
谢谢。
我正在开发ASP.Net MVC 3 Web应用程序.我的一个Razor Views包含一些Textbox和一个下拉列表.当用户从下拉列表中选择一个选项时,我需要一个部分视图或类似的东西,以显示在下拉列表下方,而不需要回发.
问题是,当用户从下拉列表中选择一个选项时,它并不像简单的JQuery Hide and Show for Partial View那样容易,我需要将它们的选项发送到Controller中的方法,执行一些基于此选项的逻辑,然后将一些数据返回到部分视图.
我对AJAX没有太多经验,但我觉得这是我需要使用的技术才能解决我的问题.
有没有人必须编写类似于我上面描述的任何代码?如果是这样,我需要使用AJAX吗?
此外,如果有人知道任何教程或代码snipets我可以看到帮助,这将不胜感激.
谢谢.
UPDATE
我跟着Ryan的回答,不幸的是我仍然有一些问题.我创建了以下JavaScript文件,然后在我的视图中引用
$(document).ready(function () {
$("#myDDL").change(ChangeEventOfDDL);
function ChangeEventOfDDL(){
var dropDownValue = $('#myDDL').val();
//alert(dropDownValue);
$.ajax({ type: "GET",
url: '@Url.Action("SomePartialView","testAjax")',
data: {
id: dropDownValue
},
success: function(data) {
$('#someDivToLoadContentTo').html(data);
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
视图
<select id="myDDL">
<option></option>
<option value="1">F1</option>
<option value="2">F2</option>
<option value="3">ST1</option>
<option value="4">ST2</option>
</select>
<div id="someDivToLoadContentTo">
</div>
Run Code Online (Sandbox Code Playgroud)
我的控制器看起来像这样
public class testAjaxController : Controller
{
//
// GET: /testAjax/
LocumEntities context = new LocumEntities();
public …Run Code Online (Sandbox Code Playgroud) 我创建了一个新的用户类型的空列表(用户是我的EDM中的实体)
List<User> AvailableLocums = new List<User>();
AvailableLocums = null;
Run Code Online (Sandbox Code Playgroud)
我还有另一个类型为User的 List,其中填充了查询结果
List<User> Locums = _shiftDateService.GetAvailableLocums(id, shiftDate.shiftDateID).ToList();
Run Code Online (Sandbox Code Playgroud)
然后我想循环Locums List,做一些逻辑,然后将User添加到我的AvailableLocums List
foreach (var locum in Locums)
{
//Do some logic
AvailableLocums.Add(locum);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试这样做时,我得到以下错误
你调用的对象是空的.
然后我尝试修改我的代码并执行以下操作
foreach (var locum in Locums)
{
//Do some logic
User locumUser = new User();
locumUser = locum;
AvailableLocums.Add(locumUser);
}
Run Code Online (Sandbox Code Playgroud)
但我又得到了同样的错误
你调用的对象是空的.
有人可以帮我这个吗?
谢谢.