小编Mar*_*son的帖子

T4模板错误:加载包含文件ef.utility.cs.ttinclude返回null或空字符串

我已经覆盖了控制器一代T4模板(ControllerWithContext.tt)所描述的在这里.
我想利用EF.utility.CS.ttincludePOCO模型生成器T4模板中使用的代码帮助程序实用程序.因此我将以下几行复制Model.tt到我的ControllerWithContext.tt.

<#@ include file="EF.Utility.CS.ttinclude"#>
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试添加控制器时,我收到错误消息

加载包含文件'EF.utility.CS.ttinclude'返回null或空字符串

根据MSDN文档,此错误是因为包含的文件是空白的,显然不是因为它可以使用Model.tt

我能看到的唯一区别是被覆盖的ControllerWithContext.tt没有定义自定义工具,而Model.tt它被设置为TextTemplatingFileGenerator.

我的解决方法是将我需要的功能复制ef.utility.cs.ttinclude到my中ControllerWithContext.tt,这本身就会产生更多错误,但很容易解决.

如何在未定义自定义工具的情况下包含T4模板?

c# t4 visual-studio-2010

14
推荐指数
2
解决办法
1万
查看次数

ASP.NET MVC在创建对象时读取属性

我注意到以下行为,我想知道是否有人可以解释它为什么会发生以及如何防止它.

在我的部分类中,我添加了数据库中不存在的各种只读属性.创建对象时,在访问控制器的Create方法之前访问这些属性.但是,get; set;不会访问使用just声明的属性.

使用非常简单的示例详细说明,如果我有以下属性:

public bool getBoolProperty {
    get {
        return true;
    }
}
public bool getSetBoolProperty {
    get; set; 
}
Run Code Online (Sandbox Code Playgroud)

如果我然后在属性上放置断点,则在创建对象时,将针对第一个属性而不是第二个属性触发断点.但是,如果我有一个方法:

public bool getBoolProperty() {
    return true;
}
Run Code Online (Sandbox Code Playgroud)

那么这是不被访问的.

我尝试了各种各样的变化和注释

// empty set
public bool getBoolProperty {
    get {
        return true;
    }
    set {}
}

// not mapped attribute
[NotMapped]
public bool getBoolProperty {
    get {
        return true;
    }
}

// getting private variable
private bool _boolProperty = true;
public bool getPrivateBoolProperty {
    get {
        return _boolProperty; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc entity-framework

9
推荐指数
1
解决办法
1006
查看次数

在实体框架中映射选择存储过程

我的场景我正在使用带有Entity Framework 4.1的Visual Studio 2010我有一个包含许多表和许多存储过程的遗留数据库.我正在使用MVC 3编写ASP.NET C#程序

我已经使用ADO.NET DbContext采用了"数据库优先"设计,所以我有一个edmx,它可以很好地设置所有模型和关联以及导航属性.我可以将插入,更新,删除程序映射到相关模型.我使用'Function Import'导入其他存储过程.但是,我找不到一种方法来映射我的Select过程来选择动作(按id选择,选择列表,按过滤器选择等).

EF似乎使用延迟加载,所以我想要发生的是当一个对象获取其子对象时,它使用已经编写的存储过程.(选择过程考虑'IsDeleted'标志,并使用'ORDER BY'条款等等)

我从本文 http://weblogs.asp.net/scottgu/archive/2007/08/16/linq-to-sql-part-6-retrieving-data-using-stored-procedures.aspx 看到Linq to SQL允许拖放SP,听起来或多或少,正是我想要的.

我也遇到了术语DefiningQuery. http://msdn.microsoft.com/en-us/library/cc982038.aspx 这就是我想要的吗?我不喜欢这样的说明'当您运行更新模型向导时,对存储模型所做的任何更改(包括定义查询)都将被覆盖.

总之,我想要发生的是当一个对象获取其子对象时它使用我的存储过程.

我可以使用Entity Framework实现我的目标吗?我错过了一些明显的事吗?

或者我应该尝试变得非常聪明并修改db Entity T4模板,例如,我生成的Address模型具有以下属性:

public virtual ICollection<AddressLine> AddressLines { 
    get{
        DBWrapper _db = new DBWrapper();
        return _db.GetAddressLines(AddressID);
    } 
    set{}; 
}
Run Code Online (Sandbox Code Playgroud)

其中GetAddressLines是调用函数导入的自定义函数,并执行必要的转换.

c# asp.net stored-procedures entity-framework

5
推荐指数
1
解决办法
7043
查看次数

为什么Html Helper为视图模型的子项添加前缀?

我有一个具有单个子实体和各种其他属性的视图模型.

在我看来,我想显示子实体的表单.使用以下代码:

@Html.HiddenFor(model => model.Item.ItemID)
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

<input id="Item_ItemID" name="Item.ItemID" type="hidden" value="234" />
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,Html帮助器已经为idname属性添加了前缀,而我希望输出为

<input id="ItemID" name="ItemID" type="hidden" value="234" />
Run Code Online (Sandbox Code Playgroud)

因此,前一个输出在提交表单时会导致错误,因为表单元素与子实体上的属性不对应.

我知道我可以通过对隐藏字段进行硬编码来解决这个问题

<input id="ItemID" name="ItemID" type="hidden" value="@Model.Item.ItemID" />
Run Code Online (Sandbox Code Playgroud)

哪种方式会破坏拥有Html帮助程序的原因,或者创建局部视图并传入子对象

@{Html.RenderPartial("ItemForm", Model.Item);}
Run Code Online (Sandbox Code Playgroud)

我知道能够将html属性传递给方法,并且还编写自己的扩展方法,但是当涉及数据验证和jQuery时,事情变得更加复杂,即以下代码:

@Html.EditorFor(model => model.Item.Title)
@Html.ValidationMessageFor(model => model.Item.Title)
Run Code Online (Sandbox Code Playgroud)

生成此代码:

<input class="text-box single-line" data-val="true" data-val-required="The Title field is required." id="Item_Title" name="Item.Title" type="text" value="Some text" />
<span class="field-validation-valid" data-valmsg-for="Item.Title" data-valmsg-replace="true"></span>
Run Code Online (Sandbox Code Playgroud)

所以需要一个优雅的方法来保持属性名称同步.

那么任何人都可以回答为什么HtmlHelper为视图模型的子项添加前缀到属性?作为一个后续问题,还有其他任何防止添加前缀的巧妙方法吗?

razor

4
推荐指数
1
解决办法
1388
查看次数