如果没问题,建议使用xml列存储用户界面可能提供的任何额外数据?
例如,假设一个Employee表
CREATE TABLE Employee
(
EmployeeId int not null,
Name nvarchar(300) not null,
Phone varchar(30) null,
Email varchar(320) null,
Address nvarchar(max) null,
Data xml null
)
Run Code Online (Sandbox Code Playgroud)
Data 可以包含许多值,如额外的电话号码,评论......
我们希望我们所有的客户都会询问不同的领域Employee,并且我们不想在每次想到要添加的新字段时都弄乱数据库结构.
我们希望存储在xml列中的数据是不经常访问的数据.除了在浏览员工列表时可以查看,还可能需要打印数据.所以我们确实需要沿着数据存储数据类型(有点像数据集序列化其数据)
这是存储未知额外数据的好方法吗?
编辑 给了一个更好的例子
更新 我还没有选择答案,因为我正在与我的团队讨论你们建议的不同方法.
我是Stylecop的忠实粉丝,我总是遵循它的指导方针.我还遵循指南,声明注释应该为代码带来附加值而不重复代码正在做的事情.
关于ASP.NET MVC控制器及其相关操作的评论指南,我遇到了一些麻烦:我无法考虑进行操作的注释,也不能考虑控制器.
让我们假设默认HomeController和默认Index操作,这是我正在使用的注释,但我不认为它们提供任何附加值.
/// <summary>
/// Provides functionality to the /Home/ route.
/// </summary>
public class HomeController : BaseController
{
/// <summary>
/// Displays an index page.
/// </summary>
/// <returns>An index page.</returns>
public ActionResult Index()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
我应该在控制器上使用什么样的注释及其提供附加值并增加注释有用性的操作?您已经使用过哪些评论?
我有一个LocalizedString用于存储单个值的本地化的类.这个概念基于Fabio Maulo的帖子.
我在NHibernate 3.2中使用了新的Mapping-By-Code概念,但它似乎忽略了IUserType实现,因为当它生成SQL时,它会创建一个具有不同名称和默认字符串NVARCHAR(255)类型的列.
我正在尝试绘制这个简单的类
public class Region : Entity
{
/// <summary>
/// Initializes a new instance of the <see cref="Region"/> class.
/// </summary>
public Region()
{
}
/// <summary>
/// Gets or sets the localized name of the <see cref="Region"/>.
/// </summary>
public virtual LocalizedString Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
生成的SQL是
create table Regions (RegionId INT not null, Item NVARCHAR(255) not null, primary key (RegionId))
Run Code Online (Sandbox Code Playgroud)
Item这里的列应该被调用Name,它应该是XML类型.我假设列名来自于索引器的名称 …
我有一个叫做的类LocalizedString,它是在我的asp.net mvc 3项目中引用的外部库中定义的.
我创建了一个LocalizedString.cshtml在~\View\Shared\EditorTemplates文件夹中调用的编辑器模板.
我有以下型号
public class Region
{
public LocalizedString Title { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有以下测试页面:
@model Region
@Html.EditorForModel()
@Html.EditorFor(x => x.Title)
Run Code Online (Sandbox Code Playgroud)
LocalizedString我调用时不调用编辑器模板EditorForModel,但是当我明确调用时它会渲染,EditorFor(x => x.Title)所以我知道我没有引用问题.
为什么我调用时忽略了我的编辑器模板EditorForModel(或其等价物EditorFor(x => x))
更新
我创建了一个新项目来重现这种行为.我刚刚使用了默认的ASP.NET MVC 3 Internet应用程序.
Index.cshtml
@model MvcApplication1.Models.Region
@{
ViewBag.Title = "Home Page";
}
<h2>@ViewBag.Message</h2>
<p>
To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
</p>
@Html.EditorForModel()
Run Code Online (Sandbox Code Playgroud)
HomeController.cs
using System.Web.Mvc;
using MvcApplication1.Models; …Run Code Online (Sandbox Code Playgroud) 我有一个下拉列表,不保留我选择的值.我已经检查了True的EnableViewState,还没有.这里可能缺少什么?任何建议表示赞赏.
在我们的ASP.NET MVC项目中,我们有一个HtmlHelper生成静态谷歌地图的扩展方法.
public static MvcHtmlString StaticMap(this HtmlHelper helper, string address, string alt, int width, int height, int zoom)
{
var src = new Uri("http://maps.google.com/maps/api/staticmap?markers=size:mid|color:red|{0}&zoom={1}&size={2}x{3}&maptype=roadmap&sensor=false".FormatInvariant(Uri.EscapeUriString(address), zoom, width, height));
var href = new Uri("http://maps.google.com/maps?f=q&source=s_q&hl=en&q={0}".FormatInvariant(Uri.EscapeUriString(address)));
var img = new TagBuilder("img");
img.MergeAttribute("src", src.ToString());
img.MergeAttribute("alt", alt);
var link = new TagBuilder("a") { InnerHtml = img.ToString() };
link.MergeAttribute("href", href.ToString());
return MvcHtmlString.Create(link.ToString());
}
Run Code Online (Sandbox Code Playgroud)
对于这个新项目,我们还试图保持所有代码分析规则.现在,显然,Visual Studio代码分析表明我们应该删除helper参数,因为它没有被使用.
这让我想知道扩展方法是否应该总是使用扩展对象,如果没有,那么也许它不应该是扩展方法.
有人有指南或解释的链接可以帮助我决定吗?
c# ×5
asp.net-mvc ×2
.net ×1
asp.net ×1
comments ×1
nhibernate ×1
razor ×1
sql-server ×1
stylecop ×1
xml ×1