我有一个多步注册过程,由域层中的单个对象支持,其中包含在属性上定义的验证规则.
当域被分割为多个视图时,我应该如何验证域对象?我必须在发布时将对象部分保存在第一个视图中?
我想过使用Sessions但是这不可能因为这个过程很漫长而且数据量很高,所以我不想使用session.
我考虑将所有数据保存在关系内存数据库中(使用与主数据库相同的模式),然后将该数据刷新到主数据库,但出现问题因为我应该在服务(在视图中请求)中使用主数据库和内存数据库.
我正在寻找一个优雅而干净的解决方案(更准确地说是一种最佳实践).
更新和澄清:
@Darin感谢您的深思熟虑的答复,这正是我迄今为止所做的.但顺便说一句,我有一个请求,里面有很多附件,我设计了一个Step2View
例如哪个用户可以异步上传文件,但是这些附件应该保存在一个表中,该表与之前保存的另一个表有参考关系.Step1View
.
因此,我应该Step1
(部分地)保存域对象,但我不能,导致部分映射到Step1的ViewModel的支持的Core Domain对象无法保存而没有来自转换的道具Step2ViewModel
.
我想知道为什么在编译时检查C#中的某些转换,而在其他情况下,责任转储到CLR上.如上所述都是不正确的,但以不同的方式处理.
class Base { }
class Derived : Base { }
class Other { }
static void Main(string[] args)
{
Derived d = (Derived)new Base(); //Runtime InvalidCastException
Derived d = (Derived)new Other(); //Compile-time Cannot convert type...
}
Run Code Online (Sandbox Code Playgroud)
在阅读"C#深度"时,我发现了有关此主题的信息,其中autor说:
"如果编译器发现实际上不能使该转换工作,它将触发编译错误 - 如果理论上允许但实际上在执行时不正确,CLR会抛出异常."
"理论上"是否意味着通过继承层次结构(对象之间的另一个关联性?)连接,还是编译器的内部业务?
为什么我必须提供显式泛型参数类型而编译器应该推断出类型?
public static T2 Cast<T1,T2>(this T1 arg) where T2 : class where T1 : class
{
return arg as T2;
}
Run Code Online (Sandbox Code Playgroud)
样品用法:
objOfTypeT2 = objOfTypeT1.Cast<TypeT1,TypeT2>();
Run Code Online (Sandbox Code Playgroud)
与我对更智能的编译器的期望用法相比:
objOfTypeT2 = objOfTypeT1.Cast<TypeT2>();
Run Code Online (Sandbox Code Playgroud)
或者我应该更聪明:-)
请注意,我提供了返回类型.我想不提供我在其上调用函数的对象,该方法是一个扩展方法.
var nums = new[]{ 1, 2, 3, 4, 5, 6, 7};
var pairs = /* some linq magic here*/ ;
Run Code Online (Sandbox Code Playgroud)
=> pairs = {{1,2},{3,4},{5,6},{7,0}}
元素pairs
应该是两元素列表,或者是一些具有两个字段的匿名类的实例,例如new {First = 1, Second = 2}
.
public static class MyClass
{
public static void Add<T>(this List<T> list, T item)
{
list.Add(item);
Console.WriteLine(item.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
然后
List<string> list = new List<string>(){"1","2"};
list.Add("3");
Run Code Online (Sandbox Code Playgroud)
但是会调用成员方法.
反正有没有打电话给我Extension Method
?
我不想这样称呼它:
MyClass.Add(list, item)
Run Code Online (Sandbox Code Playgroud) 我得到"无法将MySQL日期/时间值转换为System.DateTime"错误,因为从我可以告诉我有一个记录与0000-00-00 00:00:00.现在虽然数据永远不应该(它应该为null),但有时可能会发生这种情况,并且我不希望整个应用程序因此而崩溃.我正在使用NHibernate,我尝试添加更改我的连接字符串以允许零日期时间,因此连接字符串配置如下所示:
<property name="connection.connection_string">
Server=localhost;Database=user_system;User ID=root;Password=root;
Allow Zero Datetime=true;
</property>
Run Code Online (Sandbox Code Playgroud)
但是我仍然收到这个错误.如何允许NHibernate为时间戳/日期时间/数据/时间允许零值?
那是我的代码.
现在我需要向主机发送cookie但我找不到解决方案.
def get_network_file(url=nil)
begin
http = Net::HTTP.new( @service_server, 80 )
resp, data = http.get( url, { "Accept-Language" => @locale } )
if resp.code.to_i != 200
RAILS_DEFAULT_LOGGER.error "*** return code != 200. code = #{resp.code}"
return ""
end
rescue Exception => exc
RAILS_DEFAULT_LOGGER.error "*** message --> #{exc.message}"
return ""
end
return data
end
end
Run Code Online (Sandbox Code Playgroud)
我正在学习编程,我的问题是我有一堆对象,我想只有在列表尚未包含该对象时才将这些对象添加到列表中.其次,如果对象已经包含,我想忽略该对象并添加下一个对象.我想我的第一部分工作只需要第二部分的帮助.非常感谢.
PartyGroup partyGroup = new PartyGroup();
using (AseDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
if (!myPartyGroupList.Contains(partyGroup))
{
partyGroup.PartyGroupID = Convert.ToInt32(reader["party_group_id"]);
partyGroup.PartyGroupName = reader["party_group_name"].ToString();
partyGroup.PersonList = myPersonList;
myPartyGroupList.Add(partyGroup);
}
else
{
//??
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用角度1.3和角度ui bootstrap和ui-grid 3(因为支持rtl).
这是傻瓜.
我创建了表stu_dep_det
CREATE TABLE `stu_dept_cs` (
`s_d_id` int(10) unsigned NOT NULL auto_increment,
`stu_name` varchar(15) , `gender` varchar(15) , `address` varchar(15),`reg_no` int(10) ,
`ex_no` varchar(10) ,
`mark1` varchar(10) ,
`mark2` varchar(15) ,
`mark3` varchar(15) ,
`total` varchar(15) ,
`avg` double(2,0),
PRIMARY KEY (`s_d_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=8 ;
Run Code Online (Sandbox Code Playgroud)
然后插入值
INSERT INTO `stu_dept_cs` (`s_d_id`, `stu_name`, `gender`, `address`, `reg_no`, `ex_no`, `mark1`, `mark2`, `mark3`, `total`, `avg`) VALUES
(1, 'alex', 'm', 'chennai', 5001, 's1', '70', '90', '95', '255', 85),
(2, 'peter', 'm', 'chennai', 5002, …
Run Code Online (Sandbox Code Playgroud) 我正在开始我的第一个RoR项目,我现在已经是一个LESS用户了一段时间.我没有反对Sass,我只是偶然发现了LESS.那说:
我不想知道哪个Sass和LESS"更好",只是如果有一个固有的理由更喜欢Sass和Ruby开发.
我希望通过循环遍历它们并使用如下反射来获取MDI表单值的每个ToolStripMenuItem:
FieldInfo[] menuitems = GetType().GetFields(BindingFlags.GetField |
BindingFlags.NonPublic | BindingFlags.Instance);
foreach (var item in menuitems )
if (item.FieldType.Equals(typeof(ToolStripMenuItem)))
MessageBox.Show(
item.FieldType.GetProperty("Tag").GetValue(item, null).ToString());
Run Code Online (Sandbox Code Playgroud)
但我得到"对象不匹配目标类型"错误,我很困惑,不知道指定哪个对象作为获取值的源对象.
请指导我...提前谢谢你.
c# ×7
.net ×3
ruby ×3
mysql ×2
aggregate ×1
angular-ui ×1
asp.net ×1
asp.net-mvc ×1
casting ×1
cookies ×1
equality ×1
generics ×1
http ×1
keyword ×1
less ×1
linq ×1
list ×1
net-library ×1
nhibernate ×1
parsing ×1
reflection ×1
sass ×1
slice ×1
sql ×1
sql-server ×1
t-sql ×1
type-systems ×1